REST 服务的最佳用途是什么?

2024-03-15

我知道像 Facebook 这样的网站现在正在使用 REST 服务,但我想知道其他使用 REST 的应用程序,以及是否存在特定情况下使用 REST 比其他方法更合理。


REST 与 CRUD 数据服务无关。是的,您可以使用 REST 来执行类似 CRUD 的服务,但这就像说正则表达式用于解析电子邮件地址一样。

Here http://www.slideshare.net/trilancer/restful-user-experience-1421793这是迄今为止我所见过的有关 REST 与 SOAP/RPC 辩论的最佳演示。

REST 更注重解决分布式客户端/服务器交互,而不是处理服务器到服务器交互。 REST 是将内容呈现在用户面前,以便他们可以选择如何处理它。 REST 并不是要创建基于 Http 的数据访问层来将应用程序逻辑与其数据存储分离。

Atom Pub 是一个很好的 REST 实现。 Netflix API 是最好的商业 REST API 之一。 Twitter API 不符合大多数 RESTful 约束。

如果您想了解有关 REST 的准确信息,请访问以下位置:

  • http://roy.gbiv.com/untangled/ http://roy.gbiv.com/untangled/
  • http://tech.groups.yahoo.com/group/rest-discuss/ http://tech.groups.yahoo.com/group/rest-discuss/
  • http://www.innoq.com/blog/st/ http://www.innoq.com/blog/st/
  • http://www.infoq.com/ http://www.infoq.com/

不要听大供应商在这个问题上的说法,他们更感兴趣的是使他们现有的产品符合流行语。


跟进:

我认为 REST 接口比服务器到服务器交互更适合客户端/服务器交互,有几个原因。这只是我的观点,我并不是想声称除了我之外的任何人都持有这种观点!

多对一的比例

当您支持许多客户端访问单个服务器时,缓存和无状态服务器的好处变得更加明显。服务器与服务器之间的通信通常是 1-1 的,很少有大量服务器与单个服务器进行通信。

松耦合

REST 就是松散耦合。这个想法是您可以继续发展服务器而无需更新客户端。如果您正在考虑在服务器 A 上实现 REST 服务,而该服务将由位于同一房间的服务器 B 调用,那么松散耦合的好处就会减弱。在两台机器上更新一个软件不会让你丧命。

超媒体

超媒体约束是根据当前应用程序状态为用户提供选择。 REST 接口支持对超链接系统的临时探索。服务器与服务器之间的通信往往侧重于实现特定任务。例如处理这批数据。根据时间表触发这些事件。本质上,没有用户坐在那里决定要遵循哪条路径。该路径已根据参数和条件预先确定。

表现

在服务器到服务器通信场景中,实现最大吞吐量可能至关重要。二进制协议可能比 Http 更合适。在服务器到服务器类型的通信中,延迟可能很关键。在一端由人类驱动的客户端-服务器环境中,性能要求有很大不同,我相信 REST 约束更适合这种类型的交互。

互操作性

REST 建议使用标准媒体类型作为 HTTP 负载。这鼓励偶然地重用所提供的服务。我认为,与针对其他服务器的服务相比,重用供客户端应用程序使用的服务的机会要多得多。

在设计 REST 接口时,我喜欢认为服务的使用者是一个受最终用户直接控制的软件。 Web 浏览器被称为用户代理并非巧合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

REST 服务的最佳用途是什么? 的相关文章

  • Mandrill 通过 REST API 作为单独的消息发送给多人

    我正在尝试使用山魈发送邮件 问题是 当我将多个收件人添加到 收件人 参数时 它会多次向 收件人 列表中的所有收件人发送同一封邮件 我期望将相同的邮件单独发送给列表中的每个人 我错过了什么吗 key app key template name
  • Spring REST 控制器中带有 RequestBody 的 XML/JSON POST

    我正在使用 Spring 3 0 创建一个 RESTful 网站 我在用ContentNegotiatingViewResolver以及 HTTP 消息转换器 例如MappingJacksonHttpMessageConverter对于 J
  • 如何使用继承来建模 RESTful API?

    我有一个需要通过 RESTful API 公开的对象层次结构 但我不确定我的 URL 应该如何构建以及它们应该返回什么 我找不到任何最佳实践 假设我有从动物继承的狗和猫 我需要对狗和猫进行CRUD操作 我还希望能够对一般动物进行手术 我的第
  • 如何向我的 Spring MVC REST 服务添加错误?

    如果用户没有输入我正在编码的两个名称 我如何更改 更新来自 Spring MVC 的以下 REST 调用以返回错误 未找到 RequestMapping value name method RequestMethod GET Respons
  • REST - 复杂的应用程序

    我正在努力将 RESTful 原则应用到我正在开发的新 Web 应用程序中 特别是 为了实现 RESTful 每个 HTTP 请求本身都应该携带足够的信息 以便其接收者对其进行处理 从而与 HTTP 的无状态性质完全一致 该应用程序允许用户
  • 瞬态 REST 表示

    假设我有一个 RESTful 超文本驱动的服务 用于模拟冰淇淋店 为了帮助更好地管理我的商店 我希望能够显示每日报告 列出所售每种冰淇淋的数量和美元价值 看来这种报告功能可以作为名为 DailyReport 的资源公开 DailyRepor
  • Web 服务应该是事务性的吗?

    我正在研究为应用程序编写网络服务 在此应用程序中 我们在事务中执行所有操作 因为 工作单元 通常不是单个实体 而是跨越多个表的多个实体 在某些情况下 我们想要 全有或全无 而交易是非常有意义的 然而 我不太确定如何在网络服务中执行此操作 也
  • 什么时候使用Jersey的@Singleton注解?

    我正在开发 RESTful Web 服务 并在阅读泽西岛时文档 https jersey java net documentation latest jaxrs resources html d0e1851我发现了一个注释 Singleto
  • 端点按资源 swagger 注释分组?

    我正在使用 Spring 进行 REST API 开发 我有一些 API 其中有很多端点 当我打开 swagger ui 时 它看起来很拥挤 我刚刚读过this https swagger io docs specification gro
  • jersey 2.2:ContainerResponseFilter 和 ContainerRequestFilter 永远不会被执行

    按照泽西岛网站上的入门指南进行操作 我执行了以下构建命令 mvn archetype generate DarchetypeArtifactId jersey quickstart grizzly2 DarchetypeGroupId or
  • 如何按角色限制对 Spring Data REST 投影的访问?

    在使用 Spring Data JPA 和 Spring Data REST 的应用程序中 假设您有一个如下所示的实体类 Entity public class Person Id GeneratedValue private int id
  • Jersey 对空列表的响应为 null 而不是 {}

    我有一个使用 Jersey 的 JAX RS REST 服务 我使用 JAXB 进行 JSON 编组 即 XmlRootElement 其中一个方法返回使用 JPA 持久化的对象列表 当此列表包含条目时 它会按我的预期工作 例子 andro
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • 如何根据域名更改视图格式

    我想知道是否有任何方法可以根据域名更改相同 Rails 应用程序的视图格式 例如 www domain com gt respond to format html api domain com gt respond to format xm
  • 如何设计 RESTful 搜索/过滤? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我目前正在 PHP 中设计和实现 RESTful API 然而 我并没有成功地实现我最初的设计 GET users list of users
  • Wiremock:如何匹配没有特定属性的 JSON 请求?

    我正在尝试模拟一个在 POST 中接受 JSON 正文的 API 调用 它有两种可能的响应 如果身体含有SearchCenter属性 回答 A 如果正文不包含SearchCenter 回答B In the 请求匹配 http wiremoc
  • 重命名猫鼬中的字段[重复]

    这个问题在这里已经有答案了 我有两个 JSON 对象 每个对象都有一个名字字段 我想将名字重命名为名称 还想使用猫鼬将现有的名字值导入到名称 Schema const mongoose require mongoose const Sche
  • 放心 + 模拟 MVC @ControllerAdvice

    在我的项目中 我使用 Rest Assured MockMVC 并具有以下依赖项
  • 使用 C++ REST SDK Casablanca 发送 HTTP POST 请求以更新文件内容

    我正在尝试使用 C Rest sdk 更新 alfresco 服务器中的文件内容 我正在使用 alfresco CMIS url 发送请求 更具体地说 它是 Alfresco CMIS 浏览器绑定 我必须坚持浏览器绑定而不是原子绑定 当我发
  • 为 Rest Web 服务创建 WCF 代理

    我有一个复杂的 WCF Rest 服务 它需要多个输入和对象 我不能简单地通过在 Fiddler 中执行 HTTP POST 来调用它 因为要提供的数据太多 我可以 但这将花费我很长时间 所以我想使用代理在代码中完成它 有没有办法为 NET

随机推荐