Rest API的初始化和存在终结点 要求 检查报告是否存在的方法 初始化新报表的方法(客户端不知道表示) 获取报告的方法
注意:报告存在或不存在,并且从来没有超过一个 想法1Rest API的初始化和存在终结点 要求 检查报告是否存在的方法 初始化新报表的方法(客户端不知道表示) 获取报告的方法,rest,api,http,Rest,Api,Http,注意:报告存在或不存在,并且从来没有超过一个 想法1 GET/account/{id}/report 404如果报告不存在 200如果报告确实存在 但是如何初始化呢POSTing或PUTting一个空的主体到端点似乎是错误的(POST,因为我们知道资源在哪里;PUT,因为我们不想什么都不在那里),但也许那只是我。另一种方法可能是GET/account/{id}/report/init 想法2 GET/account/{id}/report 200如果报告存在;返回报告 200如果报告
GET/account/{id}/report
如果报告不存在404
如果报告确实存在200
POST
ing或PUT
ting一个空的主体到端点似乎是错误的(POST
,因为我们知道资源在哪里;PUT
,因为我们不想什么都不在那里),但也许那只是我。另一种方法可能是GET/account/{id}/report/init
想法2
GET/account/{id}/report
如果报告存在;返回报告200
如果报告不存在;初始化并返回报告200
GET /A3E7205B-6DC6-4685-9133-2759F739BC22
如果我希望元数据不包含报表本身
HEAD /A3E7205B-6DC6-4685-9133-2759F739BC22
如果我想更改报告
POST /A3E7205B-6DC6-4685-9133-2759F739BC22
PUT
和PATCH
是具有更具体语义的POST
的有效替代方案,因此可以在那里使用
从REST的角度来看,create只是另一种编辑:
资源可以映射到空集合,空集合允许在概念的任何实现存在之前引用该概念——Fielding
但是POST的一般灵活性的一部分是它支持创建具有不同标识符的资源。如果你愿意,你可以这样做
如果报告不存在;初始化并返回报告
GET语义应该是安全的——允许缓存通过预加载资源来改善体验,允许爬行器对资源进行爬网,等等。这并不意味着你不能创建一些东西——HTTP约束你的语义,而不是你的实现——只是你需要意识到其中的含义
HTTP并不试图要求GET的结果是安全的。什么
它确实要求操作的语义是安全的,并且
因此,这是实现的错误,而不是接口的错误
或者该界面的用户,如果结果发生任何事情
造成财产损失--
你观察到:
发布。。。到端点的空实体似乎是错误的
不,真的很好。您需要考虑其他一些用例(将一个空的主体发布到一个确实存在的报告中意味着什么?)
但是,如果创建一个新的报告实际上是免费的,而客户不需要知道详细信息?然后告诉客户
获取
表示,并根据需要创建所需内容。为什么客户需要知道报告是否存在?这对客户重要吗?作为一种资源,对“报告”的期望是什么。它只是一个对象还是一个动作/操作/服务?一个对象:业务层可能已经根据需要创建了一个或多个报告。在这种情况下,Idea-1似乎是正确的方法。操作/操作/服务:然后在Idea 2中的“200如果报告不存在;初始化并返回报告”似乎是正确的方法。我不确定这两种情况的混合是否正确。Thnks