JAMstack约定是否与RESTful API设计兼容



我最近在Netlify上构建了很多快速原型。我喜欢这项服务,因为它易于设置和部署。但我一直遇到他们围绕API端点的JAMstacky约定与我自己的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上设置它,也许使用无服务器框架,那么这些端点中的每一个都将是自己的lambda。但Netlify没有提供这样的配置选项。这很不错。我讨厌配置。但是使用Netlify很难实现这些端点。

特别是在这种情况下,Netlify会自动创建与文件名匹配的端点。因此,如果您有一个名为users.js的文件,它将创建一个/users端点。问题是,该文件将用于/users的每个可能排列。每个HTTP方法。每条副航线。它们都进入这个lambda。因此,为了实现RESTful API设计,我必须将所有内容都放在一个lambda中,并使其成为一个路由器。这似乎挫败了无服务器的整个想法。

因此,通常当你阅读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不兼容?对于Netflify/JAMstack项目,是否有不同的约定倾向于取代REST?

"JAMstack是否有一些固有的东西使它与REST不兼容"我会说不,因为它没有关联。您不是在用Jamstack构建API。您使用的服务(Netlify(支持与站点其他部分一起运行的无服务器功能。请记住,Netlify无服务器功能只是一个选项。你可以设置自己的AWS设置并支持你想要的机制,并且仍然可以将其与Jamstack网站的其他部分结合使用。我喜欢Netlify的无服务器功能,但它不适用于100%的用例。

我想我的tl;dr is-Netlify试图为构建Jamstack网站的人们简化无服务器,但它并不能涵盖所有用例。如果没有,你仍然可以在网站上使用自己的解决方案。

最新更新