api - 根据 Restful 实践,REST API 端点中的 URI
问题描述
我计划为我们的 REST API 提供这些端点。
PUT /tenant/:tenantId/users/save/:username
POST /tenant/:tenantId/users/invite
获取 /tenant/:tenantId/users/fetch
GET /tenant/:tenantId/users/fetch/:username
PATCH /tenant/:tenantId/users/activate/:username
POST /tenant/:tenantId/groups/save/
诸如保存/获取/激活之类的动词是从一致性的角度来看的。这些 RESTFul 是否符合 REST 原则?如果有的话,应该如何改变这些?有什么建议吗?
解决方案
根据此REST 资源命名指南:
RESTful URI 应该引用作为事物(名词)的资源,而不是引用动作(动词),因为名词具有动词没有的属性——类似于资源具有属性。
并且
不应使用 URI 来指示执行了 CRUD 功能。URI 应该用于唯一标识资源,而不是对它们进行任何操作。应该使用 HTTP 请求方法来指示执行了哪个 CRUD 功能。
因此,让我们以您的第一个 URI 为例
PUT /tenant/:tenantId/users/save/:username
在这里,您使用动词save。如前所述,您不应该在 URI 中指示 CRUD 操作,在这种情况下使用 POST 会更合适。这是每个 HTTP 动词用途的指南。知道了这一点,我认为例如,对于这种情况更合适的 URI 将类似于
POST /tenants/:tenantId/users/:username
在这种情况下:
GET /tenant/:tenantId/users/fetch
GET /tenant/:tenantId/users/fetch/:username
您应该删除fetch,因为您已经通过 GET 动词告诉您正在获取数据。第 6 个例子也是如此。
但是,这并不意味着您不能在 URI 中使用动词,实际上有一个特定的类别称为控制器,如同一指南中所述:
控制器资源对程序概念进行建模。控制器资源就像可执行函数,有参数和返回值;输入和输出。使用“动词”来表示控制器原型。
这个控制器资源可能会很好(我假设),例如你的
GET /tenant/:tenantId/users/activate/:username
.
但我认为动词激活应该放在最后:
GET /tenant/:tenantId/users/:username/activate
推荐阅读
- javascript - 模态未在按钮单击时显示 - vanilla JavaScript
- jquery - BitMovin 抛出 (ERRO_INSEURE_RESPONSE) 错误
- android-studio - Flutter 未在 Android Studio 中显示用于颜色托盘的 Intellij 建议框
- wordpress - 子域通配符重定向
- javascript - 如何从 MongoDB 数组中仅返回对象的字符串值
- reactjs - 反应导航 4 MaterialTopTabNavigator - activeLabelStyle
- scala - Base64中的私钥转换
- sql - 评估嵌入在每一行中的 SELECT 子句
- python - 在python中将元数据从一个mp4文件复制到另一个文件
- cmake - Clion Remote - 是否可以创建远程工具链并将其应用于项目?