Web服务 - REST与PHP JSON RPC比较

6

我正在开展一个项目,尝试公开软件的功能。基本上,我已经设置好了后端,并考虑使用JSON消息将前端代码与后端代码分离。我有一点困惑,不知道服务和API之间有什么区别。我知道API可以建立在服务的基础上。但是我有这两个模型--使用json-rpc访问配置文件X。

http://xyz.com/?request={"jsonrpc":"2.0","id":1,"method":"getProfile","params":{"id":"X"}}

还是应该像这样使用REST吗 -

http://api.xyz.com/X

谢谢您


1
在这里,你可以看到一个比较:https://dev59.com/L3NA5IYBdhLWcg3wEpoU - Chuidiang
如果你想使用RPC,就用SOAP。否则就用REST。 - Shiplu Mokaddim
2个回答

22

“服务(Service)”与“应用程序编程接口(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,因为:

  • 我不必尝试将所有的函数调用都适配成某种可能不合理的资源到 URL 映射
  • 我们不会试图通过HTTP响应代码来表示API错误。每个请求都返回200响应(除非有服务器错误),你可以从响应体中知道是否出现了错误。JSON-RPC在明确错误条件方面表现特别好。

有时候REST更好,因为:

  • 有时候资源到URL的映射很匹配
  • 它对第三方更易于理解
  • 它提供了一种更简单的模型来检索易于识别的信息

我认为编写代码都一样难。

编辑 我将REST示例更改为使用更常见的表单编码数据而不是JSON。但是当然,您可以使用任何数据格式指定REST。 它没有被刻意固定死。


谢谢您的回复.. 将rpc服务创建“REST包装器”是否有意义...就像如果您正在访问用户配置文件“user1”,那么用户将键入 - “http://xyz.com/user1”..这将在内部调用rpc服务以获取具有id“user1”的资源? - Fox
只要你有一个简单的REST<->RPC映射,这是可行的。即便如此,这也需要额外的工作。你必须问自己从中获得了什么好处。我通常会选择其中之一。 - slashingweapon

0

您的REST URL与JSON-RPC请求不匹配。

至少应该是http://api.example.org/getProfile?id=X

两者之间实际上没有太大的区别。除非您返回可靠地表达到不同URL链接的数据格式,例如XML或(X)HTML,否则您的“REST”并不是真正的REST。在满足此要求之前,您只能称其为“RESTful”,因为您实际上只使用HTTP方法来触发操作并在不同URL之间移动数据。

您使用什么并不重要-除非您知道或具有支持您更快地构建一种解决方案而不是另一种解决方案的软件的经验。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接