具有多个必需参数的RESTful URI的最佳设计是什么?

Car*_*los 9 python rest uri web-services

我想看看是否有更多经验丰富的Web服务资深人士可以评论在我需要强制参数的地方设计RESTful URI的最佳方法.举个例子,我想设计一个请求数据的URI:

example.com/request/distribution
Run Code Online (Sandbox Code Playgroud)

但是,根据我的理解,方法是更多数据应该返回更高级别,而如果应用更具体的URI关键字将返回更详细的数据,但在我的情况下,我需要至少3个值才能实现.这3个值将是日期值,帐户值和专有分发代码值.例如:

example.com/request/distribution?acct=123&date=20030102&distcode=1A;1B;1C
Run Code Online (Sandbox Code Playgroud)

这被认为是一个"RESTful"URL还是有更好的方法更有意义?任何输入都非常感谢.

顺便说一下,Python是首选语言.谢谢!

fum*_*chu 5

根据定义,URI不能自己"unRESTful",因为URI规范是由REST架构风格引导的.如何使用 URI可能违反REST样式:

  1. 不遵循"客户端 - 服务器"约束; 例如,通过使用WebSockets实现服务器推送.
  2. 不遵循"资源识别"约束; 例如,使用URI的一部分来指定控制数据或资源元数据,而不是坚持识别资源,或者通过除URI之外的某种机制(如会话状态或其他带外机制)识别资源.
  3. 不遵循"通过陈述来控制资源"的约束; 例如,通过使用URI的查询字符串部分来传输状态.
  4. 不遵循"自描述信息"约束; 例如,使用HTTP GET修改状态,或使用Content-Type为"text/html"传输JSON.
  5. 不遵循"超媒体作为应用程序状态引擎"的约束; 例如,不提供要跟随的用户代理超链接,而是假设它将使用带外知识构造它们.
  6. 不遵循"分层系统"约束,要求客户端了解服务器工作方式的内部细节(特别是要求客户端在请求中提供它们).

以上都不一定是糟糕的选择.它们可能是您系统的最佳选择,因为它们可以培养某些架构属性(例如效率或安全性).它们只是REST风格的一部分.

您的资源由多个必需段标识的事实是URI设计的重要组成部分.正如Anton指出的那样,在example.com/request/distribution?acct=123&date=20030102&distcode=1A;1B;1C和之间的选择example.com/accounts/123/distributions/20030102/1A;1B;1C纯粹是数据设计之一,而不是URI层本身的问题.例如,响应对前者的PUT,POST或DELETE请求没有任何错误.未能跟随任何一个链接的客户端将被视为已损坏.期望通过除超媒体响应之外的某种方式使客户端可用的系统将被视为"不可靠".