Недавно написал API в течение некоторого времени с Laravel, суммирую свой опыт.
Start
- APIМы видим, что некоторые веб-сайты используютtokenПодтвердить личность, некоторое использованиеOAuth2.0, я тоже тогда запутался, а потом увидел хорошую постановку. В значительной степени это будет связано с использованием другихOAuth, для собственного использованияtokenБудет достаточно
- Изначально предназначен для наилучшего расширения, чтобы потом добавить в версию несколько маршрутов, удобный
Route::prefix('v1')->group(function () {
// more
});
- Если внешний интерфейс считает междоменным, используйте этот очень удобный пакетbarryvdh/laravel-cors
Простой пример интерфейса
проверять
- Разработка API всегда неотделима от проверки, которую рекомендуется здесьjwt-auth, 1.0 скоро выйдет, и документация новой версии тоже очень понятная
- только что использовал
jwt-auth
в случае сомнений,LaravelавтономныйtokenУбедитесь, что база данных используетсяapi_tokenпроверка поля без просмотраjwt-auth
Возьми это- Потом хочу сам посмотреть исходники, результат
QAQ
- Наконец-то поехал спросить у официала >_
- Информация о оригинальной пользователях хранится вtokenСреднее шифрование
- В начале у меня были сомнения, а не расшифруется ли это, сохранив вот так? (Я очень переживаю за свой IQ!_!)
- Позже вспомнил,jwtБегать
php artisan jwt:secret
сгенерированный ключ - Вы будете в безопасности, если не просочитесь~~~
- Потом хочу сам посмотреть исходники, результат
маршрутизация
- Конечно используйте официальную
api
маршрутизацияRoute::apiResource()
, один сильнее пяти - Название маршрута, конечноRESTfulПуть
- держать глагол, множественное число, см. имя
- Какие-то длинные маршруты, чем их разделить?
- laravelПодчеркивание (-) используется, потому что когда Google включает его, ключевые слова разделяются подчеркиванием. В Китае подчеркивание (_) включается. Это зависит от вас. Мне нравится подчеркивание >_
- Подробнее здесь:соглашение об именах маршрутов
проверка формы
Вы можете использовать проверку формы, которая поставляется с контроллером, рекомендуется использоватьФорма класса, могут быть разделены, контроллер не должен заниматься слишком многими вещами.
Не скупитесь на код, который можно разделить~~~конверсия данных
- LaravelавтономныйAPI Resource
- Это действительно удобно в использовании, но я нашел проблему,
--collection
Формат - одноразового использования
Resources
- Использование коллекций
Resources::collection()
Найден, очень прост в использовании >_ - Следует сказать, что когда используется связь «многие ко многим»,
Laravel
так хорошо справилсяУсловная ассоциация - В приведенном выше примере, если ассоциация не загружена, ключ сообщений будет удален до того, как ответ ресурса будет отправлен клиенту.
- 在有不确定是否输出关联数据时,这是一个很有用的功能! ! !
Вывод ответа
в это времяlaravel-chinaЯ увидел этот пост и подумал, что этот метод хорош, поэтому я сделал то же самое, используя метод базового класса для унификации вывода ответа.
аномальный
Исключения — это большая работа, и их правильная обработка может сделать ваш код намного более элегантным.\App\Exceptions\Handler::render
Методы могут поймать много полезных исключений, например, мой код написан так:
UnauthorizedHttpException
это захватjwt
аномальныйValidationException
Это ненормальная форма, после захвата, форм, сообщений об ошибках могут быть красиво отформатированы,ModelNotFoundException
Это исключение, которое модель не может найти, после захвата это можно сделать прямо в контроллере.
// 未捕获之前的写法
public function show($id)
{
$user = User::find($id);
if (! $user) {
}
// do something
}
// 现在
public function show($id)
{
$user = User::findOrFail($id);
}
// 甚至这样
public function show(User $user)
{
// do something
}
- Следующие два исключения не могут быть перехвачены, просто для облегчения просмотра сообщений об ошибках во время разработки.
NotFoundHttpException
404 Route not found исключение, нечего сказатьMethodNotAllowedHttpException
Это метод, который не соответствует, например, выgetмаршрут, ноpostпросить
Документация
- Чуть не забыл об этом, документация очень и очень важна
- Я не большой любитель писать документацию в комментариях
- использовать
swagger-ui
+swagger-edit
- скачатьswagger-ui
- нужно всего лишь
dist
Материалы каталога (остальные можно удалить) - скачатьswagger-editor
- если только
dist
содержимое каталога и корневой каталогindex.html
- я тоже поставил
swagger-editor
изindex.html
изменился наedit.html
А затем интегрируйте эти две вещи в один и тот же каталог (не забудьте изменитьcss,jsпозиция) - Создайте два новых файла
api.json
,api.yaml
Наверное похоже на картинку - Чтобы изменить стрелку, показанную на рисунке, чтобы стать
api.json
позиция
- доступ
edit.html
Может писать документы - доступ
index.html
Документацию можно посмотреть - существует
edit.html
После написания, экспортjson
А затем вставьте его вapi.json
документ - Не забудьте также сохранить письменный формат в
api.yaml
Потому что после четкого кэша исчезнет следующий визит
написал один самpackages
- Удобно создать контроллер и проверить
- Все контроллеры наследуют переопределенный базовый класс, и вывод ответа удобен.
- Например, полная проверка занимает всего три секунды.
- Первая секунда:
php artisan api:auth
- Секунды секунды: график появления показывает успех;
- На третью секунду: Rolex, который вынял руку и определил, что всего три секунды
- Первая секунда:
- Больше применений:laravel-api-helper
работа иAPIСвязанные с развитием, используйте других опытных, а затем вернитесь, чтобы составить.