处理 Restful 服务

Posted

技术标签:

【中文标题】处理 Restful 服务【英文标题】:Handling Restful services 【发布时间】:2013-07-29 15:38:44 【问题描述】:

我一直在想有一种很好的方法来实现(实际绑定)作为客户端的 restful 服务。

您经常会看到代码 sn-ps,其中 URL-“字符串”在高级代码中被连接起来,这显然是非常混乱的。

喜欢

 "http://service.url/firstname/" + $firstname + "/surname/" + $surname

这样做的正确方法是什么?

对我来说,使用经典 rpc (JSON/XML-RPC) 方法更容易解决这个问题,在这种方法中,您可以签订合同,并且可以对您的期望更加严格。

谢谢!

-亚历山德罗

【问题讨论】:

【参考方案1】:

REST 的答案是您不应该构建 URL。在遵循 REST 租户的系统中,您正在跟踪指向已为您提供的资源的链接,以便您在系统的超媒体中导航。您从一个合理的知名 URL 作为导航的根目录开始,然后从那里浏览资源。

这被称为HATEOAS - Hypermedia as the Engine of Application State。它是 REST 架构约束之一。

此约束的显着优势是将客户端与 API 分离,从而使 API 可以随时更改其 URL 方案,并且各个客户端不必进行类似的更改。对“旧”网址的请求会出现 300 范围的错误,而新网址会逐渐填充到它们的缓存中。

就性能而言,缓存这些 URL 是合理的,只要您遵守 300 范围的代码并适当地更新缓存的 URL。

这意味着,如果您想找到具有给定名称的特定用户,您会假设您已经缓存了他们的 URL,或者您有一种机制(如 OpenSearch)来查找符合条件的用户。您不会“构建”该 URL,除非该服务为您提供了一个模板供您填充。

您可以在http://www.thomas-bayer.com/sqlrest/ 找到一个很好的 REST 服务教育示例。您的浏览器是一个足以与服务交互的客户端,并且应该演示任何客户端如何通过遵循超媒体格式来发现系统资源。

【讨论】:

感谢您的回答。对于使用常规浏览器浏览的 Web 应用程序,您的方法/想法似乎非常好。但是,例如,我将如何在所谓的真正的 JS 应用程序中做到这一点?你有例子吗?

以上是关于处理 Restful 服务的主要内容,如果未能解决你的问题,请参考以下文章

在 RESTful 服务中处理多个资源请求

Restful简介以及应用

如何在 iOS 中使用 RestKit 来处理发送 JSON 而没有 rootkey 的 RESTful 服务器?

WCF RESTFul服务中的异常处理

Wildfly8.1.0.Final 上部署的 RestFul 服务未处理 30% 的请求

暴露的 RESTful 服务是不是需要检查 XSS 攻击