@Christian Bongiorno
您正在对与 REST 无关的 URI 中的操作进行编码。它是最清晰的 RPC 形式。
您需要使用您使用的底层协议中定义的方法(即您的情况下的 HTTP)来识别资源并对这些资源执行操作。HTTP 规范为这些方法定义了语义,因此您必须执行以下操作,而不是直接在 URI 中编码操作:
- GET /users - 返回用户列表(每个条目/项目都有自己指向特定用户的链接)
- GET /users/:id - 返回特定用户
- POST /users - 在 /users 资源下创建新用户
- POST /users/:id - 编辑用户(也可以在这里使用 PATCH 方法)
- PUT /users/:id - 替换用户
- DELETE /users/:id - 删除用户
这就是你应该如何看待行动。但这还不够,您需要使用支持超媒体控件(例如链接)的媒体格式(至少),以便能够描述这些操作,例如:
一些快速交互示例:
***Request***
GET /users HTTP/1.1
Host: service.org
Accept: application/x+json
***Response***
HTTP/1.1 200 OK
Content-Type: application/x+json
Content-Length: ...
[{
"name": "john",
"links": {
"self": "/users/1",
"edit": "/users/1"
}
}, {
"name": "jane",
"links": {
"self": "/users/2",
"edit": "/users/2"
}
}]
***Request***
GET /users/2 HTTP/1.1
Host: service.org
Accept: application/x+json
***Response***
HTTP/1.1 200 OK
Content-Type: application/x+json
Content-Length: ...
{
"name": "jane",
"links": {
"self": "/users/2",
"edit": "/users/2"
}
}
***Request***
DELETE /users/2 HTTP/1.1
Host: service.org
***Response***
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: ...
Resource was destroyed...
***Request***
POST /users/2 HTTP/1.1
Host: service.org
Content-Type: application/x+json
Content-Lenght: ...
{"status": "disabled"}
***Response***
HTTP/1.1 303 See Other
Location: /users/2