Web服务 - REST与PHP JSON RPC

时间:2012-10-31 21:42:34

标签: php json api rest rpc

我正在开展一个项目,我正在尝试公开该软件的功能。基本上我有我的后端设置,并考虑使用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

谢谢

2 个答案:

答案 0 :(得分:21)

“服务”与“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做任何事情,您都会向同一网址发送请求。这个想法有例外和变体,但这就是它的关键。

RPC服务更像是使用一个绑定到特定URL的函数库。您可能有一大堆相关函数都绑定到URL /services/json。然后,如果您想更改旧Davey Jones的个人资料,您可以:

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,因为:

  • 我不必尝试将所有函数调用放入某种可能没有意义的资源到网址映射中
  • 我们不会尝试重载HTTP响应代码以指示API错误。每个请求都返回200响应(除非出现服务器错误),并且您从响应正文得知您是否收到错误。 JSON-RPC特别擅长明确错误条件。

有时候REST更好,因为:

  • 有时资源到网址的映射非常适合
  • 第三方理解
  • 更直观
  • 它提供了一种更简单的模型,用于检索易于识别的信息

我认为任何一个都不容易编码。

编辑我更改了REST示例以使用更常见的表单编码数据而不是JSON。但是,您当然可以使用REST指定您喜欢的任何数据格式。它不是刻在石头上。

答案 1 :(得分:0)

您的REST URL不等于您的JSON-RPC请求。

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

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

使用什么并不重要 - 除非您了解或拥有支持您构建一个或另一个解决方案的软件经验,而不是另一个。