Опыт Larave в разработке спокойных API

задняя часть JavaScript Google Laravel

Недавно написал API в течение некоторого времени с Laravel, суммирую свой опыт.

Start

  • APIМы видим, что некоторые веб-сайты используютtokenПодтвердить личность, некоторое использованиеOAuth2.0, я тоже тогда запутался, а потом увидел хорошую постановку. В значительной степени это будет связано с использованием другихOAuth, для собственного использованияtokenБудет достаточно
  • Изначально предназначен для наилучшего расширения, чтобы потом добавить в версию несколько маршрутов, удобный
Route::prefix('v1')->group(function () {
	// more
});
  • Если внешний интерфейс считает междоменным, используйте этот очень удобный пакетbarryvdh/laravel-cors

Простой пример интерфейса

api实例输出

проверять

  • Разработка 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
}
  • Следующие два исключения не могут быть перехвачены, просто для облегчения просмотра сообщений об ошибках во время разработки.NotFoundHttpException404 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позиция
      api
  • доступedit.htmlМожет писать документы
  • доступindex.htmlДокументацию можно посмотреть
  • существуетedit.htmlПосле написания, экспортjsonА затем вставьте его вapi.jsonдокумент
    api
  • Не забудьте также сохранить письменный формат вapi.yamlПотому что после четкого кэша исчезнет следующий визит

написал один самpackages

  • Удобно создать контроллер и проверить
  • Все контроллеры наследуют переопределенный базовый класс, и вывод ответа удобен.
    laravel-api-helper
  • Например, полная проверка занимает всего три секунды.
    • Первая секунда:php artisan api:auth
    • Секунды секунды: график появления показывает успех;
      laravel-api-helper
    • На третью секунду: Rolex, который вынял руку и определил, что всего три секунды
      手臂的手表
  • Больше применений:laravel-api-helper

работа иAPIСвязанные с развитием, используйте других опытных, а затем вернитесь, чтобы составить.

больше ссылок

Руководство по проектированию RESTful API