【发布时间】:2017-12-15 15:01:13
【问题描述】:
我目前正在与一位高级开发人员一起开发一个 Web 应用程序。我们已经同意使用 REST API 进行客户端-服务器通信,他向我发送了参数和预期的响应。
但设计似乎不是 RESTful。相反,它看起来像 JSON-RPC over http,仅使用 POST 方法。
例如,要注册一个用户,您需要向服务器发送一个 POST 请求,其中包含以下参数。
{
id: 1,
method: "RegisterUser",
params: {
firstName: "John",
lastName: 'Smith',
country: 'USA',
phone: "~",
email: "~",
password: "~"
}
}
而预期的反应是
{
id: 1
result: "jwt-token",
error : null
}
多个请求被发送到同一个 URL,服务器根据参数中的“方法”发回响应。例如,要获取用户信息,您可以向同一 URL 发送 { method: "GetUserInfo", params: { id: ~ }}。所有响应的状态码都是 200,错误由响应正文中的错误处理。所以即使状态码是200,如果error不为null就说明有问题。
我习惯做的方式是在注册新用户时向“users/”发送带有请求正文的 POST 请求,向“users/1”发送 GET 请求以检索用户信息等。
当我问他为什么决定这样做时,他在上一份工作中说,在遵循 RESTful API 设计时,尝试添加越来越多的 API 是一件痛苦的事情。此外,他说他不明白为什么 RESTful API 使用不同的 HTTP 动词,而所有这些动词都可以用 POST 完成。
我试图通过 POST 提出 REST API over JSON-RPC over http 的优点。
GET请求被浏览器缓存,但有些浏览器可能不支持POST请求缓存。
如果我们要将 API 开放给外部开发人员,这可能会让他们感到不适,因为这不是典型的 REST API。
在什么情况下 JSON-RPC over http 风格比 REST RESTful API 更好?或者它只是无关紧要,只是一个偏好问题?
【问题讨论】:
-
REST vs JSON-RPC?的可能重复
-
@Palpatim 我看过这个帖子,但它并没有真正回答我的问题。