我正在做一个项目,我试图公开软件的功能。基本上我已经设置了后端,并且正在考虑使用 JSON msgs 将前端与后端代码分开。我对服务和 API 之间的区别有点困惑。我知道 API 可以建立在服务之上。但我想到了这两个模型——使用 json-rpc 访问配置文件 X
http://xyz.com/?request= {"jsonrpc":"2.0","id":1,"method":"getProfile","params":{"id":"X"}}
还是应该像这样使用 REST -
谢谢你
我正在做一个项目,我试图公开软件的功能。基本上我已经设置了后端,并且正在考虑使用 JSON msgs 将前端与后端代码分开。我对服务和 API 之间的区别有点困惑。我知道 API 可以建立在服务之上。但我想到了这两个模型——使用 json-rpc 访问配置文件 X
http://xyz.com/?request= {"jsonrpc":"2.0","id":1,"method":"getProfile","params":{"id":"X"}}
还是应该像这样使用 REST -
谢谢你
“服务”与“API”是一个相当模糊的问题。通常,这两个术语可以互换使用。“REST”与“RPC”更容易解释。
通常使用 REST,URL 代表特定资源,例如“用户”、“帐户”等。通常,您可以使用 HTTP 方法 POST/GET/PUT/DELETE 创建/检索/更新/删除这些资源. 要更新用户 1125 的配置文件,您可以发送以下内容:
POST /user/1125 HTTP/1.1
Host: wherever.com
Content-type: application/x-www-form-urlencoded
firstName=Davey&lastName=Jones&email=dj%40thebrineydeep.com
您想对用户 1125 执行的任何操作都将向同一 URL 发送请求。这个想法有例外和变体,但这就是它的症结所在。
RPC 服务更像是使用一个函数库,它绑定到一个特定的 URL。您可能有一大堆相关函数都绑定到 URL /services/json
。然后,如果您想更改老戴维琼斯的个人资料,您可以:
POST /services/json HTTP/1.1
Host: wherever.com
Content-type: application/json
{ "jsonrpc": "2.0",
"id": 1,
"method": "setProfile",
"params": [ 1125,
{ "firstName": "Davey",
"lastName": "Jones",
"email": "dj@thebrineydeep.com"
}
]
}
我个人更喜欢 JSON-RPC,因为:
有时 REST 更好,因为:
我不认为任何一个都更容易编码。
编辑我更改了 REST 示例以使用更常见的表单编码数据而不是 JSON。当然,您可以使用 REST 指定您喜欢的任何数据格式。它不是刻在石头上的。
您的 REST URL 不等于您的 JSON-RPC 请求。
至少应该是http://api.example.org/getProfile?id=X
两者之间确实没有太大区别。而且您的“REST”不是真正的 REST,除非您返回的数据格式能够可靠地表达指向不同 URL 的链接,例如 XML 或 (X)HTML。在满足此要求之前,您应该只将其称为“RESTful”,因为您实际上只使用 HTTP 方法来触发内容和来回移动数据。
你使用什么并不重要——除非你知道或有使用支持你比另一个更快地构建一个或另一个解决方案的软件的经验。