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

#rest #aws-lambda #serverless #netlify #jamstack

#rest #aws-lambda #бессерверный #netlify #jamstack

Вопрос:

В последнее время я создавал много быстрых прототипов на Netlify. Мне нравится сервис за его простоту настройки и развертывания. Но я продолжаю сталкиваться с этим конфликтом между их соглашениями JAMstacky о конечных точках API и моим собственным опытом разработки RESTful API.

Чтобы быть более конкретным, скажем, я создаю базовый CRUD API, в котором я могу создавать, извлекать один, извлекать все и обновлять некоторый тип ресурса. Допустим, a 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, возможно, с помощью бессерверной платформы, каждая из этих конечных точек была бы их собственной лямбдой. Но 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?

Ответ №1:

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

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