Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTful体系结构中的给定URI是否应该总是返回相同的响应?_Rest_Uri - Fatal编程技术网

RESTful体系结构中的给定URI是否应该总是返回相同的响应?

RESTful体系结构中的给定URI是否应该总是返回相同的响应?,rest,uri,Rest,Uri,这是一个后续问题 那么,对任何给定URI有唯一的响应是RESTful体系结构的核心租户吗?这里的很多讨论都倾向于这一方向,但我还没有将其视为“硬性规定” 我理解它的价值(缓存、爬网、传递链接等),但我也看到twitter API违反了它(请求http://api.twitter.com/1/statuses/friends_timeline.xml将根据给定的用户名而有所不同),我知道有时可能需要这样做——更不用说按时间顺序分页的资源也会随着新元素的添加而改变 我应该努力消除来自同一个URI的各

这是一个后续问题

那么,对任何给定URI有唯一的响应是RESTful体系结构的核心租户吗?这里的很多讨论都倾向于这一方向,但我还没有将其视为“硬性规定”

我理解它的价值(缓存、爬网、传递链接等),但我也看到twitter API违反了它(请求
http://api.twitter.com/1/statuses/friends_timeline.xml
将根据给定的用户名而有所不同),我知道有时可能需要这样做——更不用说按时间顺序分页的资源也会随着新元素的添加而改变


我应该努力消除来自同一个URI的各种响应,还是我只是接受有时这是不实际的,只要我尽量减少它的出现,我就会保持良好的状态。

其余部分都没有相同的响应-但是你应该准备好处理类似“如果修改自”有意义时请求标题;)

TritterAPI显然还有其他问题——比如:这是一个设计决策。例如,一旦你允许朋友时间线被隔离,将时间线放在朋友名字元素下面是有意义的——他们显然决定不这样做;)


它可以归结为设计决策。看看OData(like)——这里它让snse在给定的时间内为每个URL返回相同的数据(缓存),因为它是一个完全公开的cataloque。对于其他情况,这可能毫无意义。

某些请求头确实会更改返回的内容(同时仍然是RESTful):

  • 显然,缓存头将用于确定是否返回304或200
  • Accept
    标题可用于确定响应的格式(HTML vs XML vs JSON)
  • Authorized
    标题至少可以确定是否返回401、403或200
  • 此外,资源也可以随时间变化

  • 真正的问题是
    Authorized
    标题(确定用户)是否可用于更改响应的内容。我还没有看到任何关于它的官方声明,但我怀疑很多人更希望URL中的用户和
    Authorized
    头用于验证访问。我怀疑这两种方法都是RESTful的。

    不是相同的响应,而是同一资源的表示(取决于conneg和条件请求头)。在Rest体系结构中,URI只标识一个资源(但一个资源可以有多个URI)。根据授权用户呈现不同的资源(HTTP身份验证、cookies等)是不好的做法,因为相同的URI表示每个用户的不同资源,如Twitter示例中所示。我不能允许您查看我的时间线并向您提供URI,因为这与您的时间线的URI相同。用户必须在URI中编码,并且访问权限受授权机制的限制。要使单个接入点根据经过身份验证的用户呈现不同的资源,请使用重定向(例如303请参阅其他,302已找到…)

    您是否有任何“不良做法”陈述的参考资料?根据登录用户返回不同内容是完全合法的。例如,我可以定义一个快捷URL
    /my/things
    ,它为登录用户返回内容,并返回
    内容位置
    标题设置为
    /users/123/things
    的响应,以指示该资源的规范位置(参见RFC 2616第14.14节)如果/my/things和/users/123/things应该表示相同的资源,那么只有一个应该返回200,另一个应该返回303 See other。内容位置应该用于给出返回的资源变体的URI(不同的表示,例如conneg),或者在POST的情况下返回创建的资源(而不是使用201+位置,后者更严格)。在您演示的情况下,它是一个不同的资源。您无法通过获取此URI来确保客户端将检索到什么资源。如果UA是浏览器,则无法复制/通过URI,因为内容位置无法直接访问。URI是资源标识符,即它们标识资源,始终相同(请参阅本文第5.2节)另请参见:web架构的Axiom 1和2()使用重定向的有趣方法。我喜欢这种方法,特别是因为
    my/things
    示例正是我所看到的(这是我的两个用例之一)。用户不必知道自己的ID就可以轻松键入URI以访问特定资源,这样他们就不必知道。REST规则#1.永远不要使用Twitter API作为指南;-)Touché;)。。。我猜隐含的问题是,RESTful是一种布尔状态,还是一种滑动比例。许多“大名鼎鼎”的应用程序会扭曲或破坏某些规则,但仍然称自己为“RESTful”。问题是,有多少中间缓存能够处理基于auth头的响应变化。如果缓存对于特定应用程序不重要,那么使用单个url也可以。但为什么要冒险呢?