【问题标题】:Web services - REST vs PHP JSON RPCWeb 服务 - REST 与 PHP JSON RPC
【发布时间】:2012-10-21 11:55:30
【问题描述】:

我正在开展一个项目,我试图公开软件的功能。基本上我已经设置了后端,并且正在考虑使用 JSON msgs 将前端与后端代码分开。我对服务和 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

谢谢

【问题讨论】:

标签: php json api rest rpc


【解决方案1】:

“服务”与“API”是一个相当模糊的问题。通常,这两个术语可以互换使用。 “REST”与“RPC”比较容易解释。

通常使用 REST,URL 表示特定资源,例如“用户”、“帐户”等。通常,您可以使用 HTTP 方法 POST/GET/ 创建/检索/更新/删除这些资源放置/删除。要更新用户 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”然后用户将键入 - ” xyz.com/user1 ".. 这将在内部调用 rpc-service 以获取 id 为 "user1" 的资源??
  • 这是可行的,只要你有一个简单的 RESTRPC 映射。即便如此,这也是额外的工作。你必须问问自己,你能从中得到什么。我通常只会选择其中一个。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2012-02-13
    • 1970-01-01
    • 2015-01-05
    • 2017-01-27
    • 1970-01-01
    • 2013-09-04
    相关资源
    最近更新 更多