如何创建没有动词的REST URL?
我正在努力确定如何设计宁静的网址。 我为所有使用带有名词的URL的宁静方式而不是动词不明白如何做到这一点。
我们正在创建一项实施金融计算器的服务。 该计算器带有一堆我们将通过CSV文件上传的参数。 用例包括:
我收集宁静的方法将是有以下类型的网址:
/parameters
/parameters/12-23-2009
您可以通过以下方式实现前三种用例:
但是,如何在没有动词的情况下做第4个和第5个用例呢? 你不需要像下面这样的URL吗?
/parameters/ID/activate
/parameters/ID/validate
??
也许是这样的:
PUT /parameters/activation HTTP/1.1
Content-Type: application/json; encoding=UTF-8
Content-Length: 18
{ "active": true }
良好URI设计的一般原则:
/resource
或/resource/
; 从您不使用的那个创建301重定向 (注意:我没有说“RESTful URI设计”; URI在REST中本质上是不透明的。)
HTTP方法选择的一般原则:
使用HTTP进行Web服务设计的一般原则:
201 Created
资源后创建; 资源必须在发送响应时存在 202 Accepted
成功执行操作或异步创建资源后202 Accepted
400 Bad Request
; 对于您的应用程序,这可能是验证错误; 通常为未捕获的异常保留500 401 Unauthorized
当有人访问您的API时没有提供必要的Authorization
标头或Authorization
内的凭证无效时未经Authorization
; 如果您不希望通过Authorization
标头获得凭据,请不要使用此响应代码。 403 Forbidden
当某人以恶意或未经授权访问您的API时被禁止 405 Method Not Allowed
有人在使用POST时应该使用PUT等 413 Request Entity Too Large
当有人试图向您发送无法接受的大文件时, 413 Request Entity Too Large
418 I'm a teapot
一个茶壶 ETag
头部是很好的 Last-Modified
应该告诉你,保持资源更新的时间戳是个好主意 Cache-Control
和Expires
应该被赋予合理的值 If-None-Modified
, If-Modified-Since
) 关于你的具体问题,POST应该用于#4和#5。 这些操作属于上述“类RPC”指导原则。 对于#5,记住POST不一定要使用Content-Type: application/x-www-form-urlencoded
。 这可能很容易成为JSON或CSV有效负载。
每当它看起来你需要一个新的动词时,想想把这个动词变成一个名词来代替。 例如,将'激活'转为'激活','验证'为'验证'。
但是从你写的内容来看,我会说你的应用程序有更大的问题。
每当提出一个名为“参数”的资源时,它应该在每个项目团队成员的头脑中发出红旗。 '参数'可以从字面上适用于任何资源; 它不够具体。
“参数”究竟代表什么? 可能有很多不同的东西,每个东西都应该有一个独立的资源专用于它。
解决这个问题的另一种方式是 - 当你与最终用户讨论你的应用程序时(那些对编程知之甚少的人)他们自己反复使用的单词是什么?
这些是你应该围绕你的应用程序设计的词汇。
如果您尚未与潜在用户进行此转换,请立即停止所有操作,直到您完成后再写下其他代码! 只有到那时,你的团队才会明白需要建立什么。
我对金融软件一无所知,但如果我不得不猜测,我会说一些资源可能会通过诸如“报告”,“付款”,“转账”和“货币”等名称。
这部分软件设计过程中有许多好书。 两个我可以推荐的是域驱动设计和分析模式。
链接地址: http://www.djcxy.com/p/6999.html