REST和Web服务 - 无法理解它们

Maj*_*ons 9 rest web-services

好吧,标题或多或少都说明了一切.我有点理解REST是什么 - 使用现有的HTTP程序(POST,GET等)来促进Web服务的创建/使用.我对如何定义Web服务有什么更加困惑,将其余的实际上是如何用来制造/暴露的服务.

例如,根据我的阅读,Twitter是RESTful.这究竟意味着什么?如何调用HTTP过程?当我写一条推文时,REST是如何涉及的,除了简单地使用服务器端语言并将该文本数据存储在数据库或文件中之外,它有何不同?

sTo*_*rov 5

这个概念对我来说也有点模糊,但在看了你的问题后,我决定为自己澄清一点.

请参阅在MSDN和链接.

基本上它似乎是关于使用http方法(Get/Post/Delete)来识别应用程序允许的资源暴露.例如:假设您有URL:

http://Mysite.com/Videos/21 
Run Code Online (Sandbox Code Playgroud)

其中21是视频的id.我们可以进一步定义允许这个URL的方法 - 用于检索资源的GET,用于更新/创建的POST,用于删除的删除.

通常,使用http方法公开应用程序资源及其支持的操作似乎是一种有条理且干净的方式


Jed*_*der 5

RESTful体系结构提供了一个唯一的URL,可以单独定义每个资源,并通过HTTP动作动词推断对相同URL执行的相应操作.

我能想到解释它的最好方法是将应用程序中的每个数据模型都视为一个独特的资源,REST帮助路由请求而不使用url末尾的查询字符串,例如,代替/posts/&q=1你,只是用posts/1.

通过示例更容易理解.这将是Rails强制执行的REST架构,但可以让您对上下文有所了解.

  • GET /tweets/1 ⇒表示您想要获取ID为的推文 1
  • GET /tweets/1/edit ⇒表示您想要转到与推文相关联的动作编辑,其ID为 1
  • PUT /tweets/1 ⇒PUT说要更新这条推文而不是获取它
  • POST /tweets ⇒POST说我有一个新的,添加到数据库,我不能给一个id因为我还没有一个,直到我将它保存到数据库
  • DELETE /tweets/1 ⇒从数据库中删除它

资源通常是嵌套的,所以在twitter中它可能就像

  • GET /users/1/jedschneider/1⇒用户有很多推文; 获取id为jedschneider及其推文ID的用户1

实现REST的体系结构对于应用程序来说是唯一的,默认情况下会支持某些应用程序(如Rails).


ber*_*kes 5

您可能想要从这个出色的介绍性写作开始.它从头到尾涵盖了所有内容.


mog*_*sie 5

你正在努力,因为对"REST"一词有两种截然不同的理解.我之前试图回答这个问题,但足以说明:Twitter的API在严格意义上并不是RESTful,Facebook也不是.

sTodorov的答案显示了常见的 误解,即它是关于使用所有四个HTTP谓词,并为资源分配不同的URI(通常记录所有URI的内容).因此,当Twitter调用REST时,他们只是在做这个,以及大多数其他RESTful API.

但是这个所谓的REST 与RPC没有什么不同,只是RPC(带有IDL或WSDL)可能会以更高的耦合为代价引入代码生成工具.

REST 实际上不是RPC.它是基于超媒体的分布式系统的架构,可能不适合每个制作API的人.在链接的MSDN文章中,超媒体在他们谈论时启动<Bookmarks>http://contoso.com/bookmarkservice/skonnard</Bookmarks>,该部分以这句话结束:

这些表示使得可以在不同类型的资源之间导航

这是大多数RESTful API违反的核心原则.本文没有说明如何记录RESTful API,如果它这样做,那么客户端必须导航链接才能执行操作(RESTful)并且不提供大量URI模板将更加清晰(RPCish).