В последнее время я создавал много быстрых прототипов на Netlify. Мне нравится этот сервис за простоту настройки и развертывания. Но я продолжаю сталкиваться с этим конфликтом между их соглашениями JAMstacky относительно конечных точек API и моим собственным опытом разработки RESTful API.
Чтобы быть более конкретным, скажем, я создаю базовый CRUD API, в котором я могу создавать, извлекать один, извлекать все и обновлять некоторые типы ресурсов. Скажем, User
. Если бы я проектировал эти конечные точки с точки зрения RESTful, это выглядело бы так:
POST /users -> Create a user
GET /users -> Fetch all users
GET /users/{id} -> Fetch one user
PUT /users/{id} -> Update a user
Теперь, если бы я устанавливал это на AWS, возможно, с фреймворком serverless, каждая из этих конечных точек была бы собственной лямбдой. Но Netlify не предлагает таких вариантов конфигурации. Что в основном приятно. Я ненавижу конфигурацию. Но с Netlify вообще трудно достичь этих конечных точек.
В частности, в этом случае Netlify автоматически создает конечные точки, соответствующие именам файлов. Итак, если у вас есть файл с именем users.js
, это создает конечную точку /users
. Проблема в том, что этот файл будет использоваться для каждой возможной перестановки /users
. Каждый метод HTTP. Каждый подмаршрут. Все они идут к этой одной лямбде. Таким образом, чтобы реализовать дизайн RESTful API, мне нужно поместить все в одну лямбду и, по сути, сделать ее маршрутизатором. Что, кажется, побеждает всю идею без сервера.
Поэтому обычно, когда вы читаете примеры Netlify, которые утверждают, что следуют шаблонам JAMstack (что-то, с чем я не очень знаком), они не используют конечные точки RESTful. Вместо этого они, как правило, делают что-то вроде этого:
POST /create-user -> Create a user
GET /fetch-users -> Fetch all users
GET /fetch-user?id={id} -> Fetch one user
POST /update-user -> Update a user
Так что это в некотором смысле вопрос Netlify, а в некотором смысле более широкий вопрос о шаблонах JAMstack. Есть ли что-то неотъемлемое в JAMstack, что делает его несовместимым с REST? Существуют ли другие соглашения, которые заменяют REST для проектов Netflify/JAMstack?