Совместимы ли соглашения JAMstack с дизайном RESTful API?

В последнее время я создавал много быстрых прототипов на 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?


person Zac Delventhal    schedule 29.09.2020    source источник


Ответы (1)


Есть ли что-то неотъемлемое в JAMstack, что делает его несовместимым с REST? Я бы сказал нет, так как это не связано. Вы не создаете API с помощью Jamstack. Вы используете службу (Netlify), которая поддерживает бессерверные функции, которые работают вместе с остальной частью вашего сайта. Помните, что бессерверные функции Netlify — это только один из вариантов. Вы можете настроить свою собственную настройку AWS и поддерживать нужный механизм, а также использовать его в сочетании с остальной частью вашего сайта Jamstack. Мне нравятся бессерверные возможности Netlify, но они не будут работать в 100% случаев.

Я предполагаю, что мой tl; dr таков: Netlify пыталась сделать бессерверную работу простой для людей, создающих сайты Jamstack, но она не охватывает все варианты использования. Когда это не так, вы все равно можете использовать свои собственные решения вместе со своим сайтом.

person Raymond Camden    schedule 30.09.2020