最近我在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方法。每条地铁。他们都会去看这首歌。因此,为了实现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不兼容?是否有不同的约定来取代REST来代替Netflify/ Are堆栈项目?
发布于 2020-09-30 15:31:26
“JAMstack的固有特性是否使其与REST不兼容?”我会说不,因为这没有关系。您没有使用Jam堆栈构建API。您正在使用一个服务(Netlify),它支持与站点其他部分一起操作的无服务器功能。记住,Netlify无服务器函数只是一个选项。您可以设置您自己的AWS设置,并支持您想要的机制,并且仍然与您的Jam堆栈站点的其他部分一起使用它。我喜欢Netlify的无服务器的东西,但是它不适用于100%的用例。
我想我的tl;dr is - Netlify试图让构建Jam堆栈站点的人简化服务器,但它并不能涵盖所有的用例。当它没有,你仍然可以使用你自己的解决方案和你的网站。
https://stackoverflow.com/questions/64121274
复制相似问题