我之前开发了一个网络应用程序来授权我们的软件。这有客户,帐户,用户和许可证。许可证分配给用户并使用序列号激活。许可证是作为处理采购订单的输出而创建的,即没有任何直接的方式来发布新许可证。
我正在阅读“RESTful Web Services”,并考虑如何使其成为RESTful(HATEOAS)。
我很清楚网址的大部分内容,但许可证需要一些有趣的操作。许可证的基本URL为/licence/{licenceID}
。
现在,在REST中,我只能使用标准方法,并且不得在URL中嵌入“分配”操作。我在想的是挑选出我想要影响的许可证部分。这给出了: -
GET /licences/
GET /licences/{licenceID}
POST /licences/{licenceID}/assignee/{userID}
DELETE /licences/{licenceID}/assignee
POST /licences/{licenceID}/serialNumber/{serialNumber}
DELETE /licences/{licenceID}/serialNumber
POST /licences/{licenceID}/expires
DELETE /licences/{licenceID}/enabled
我的问题是: -
/assignments/{licenceId}/{userId}
)非常感谢!
答案 0 :(得分:2)
GET /licences/
很好,虽然我会自己使用GET /licences
:)
GET /licences/{licenceID}
看起来不错
POST /licences/{licenceID}/assignee/{userID}
我建议这会适得其反,除非许可证可分配给多个被许可人。相反,我建议
PATCH /licences/{licenceID}
{ assignee={userID} }
或
PUT /licences/{licenceID}/assignee
{userID}
选择哪个应取决于许可的受让人更改的频率。如果经常使用后一个选项,如果不经常使用前者。
DELETE /licences/{licenceID}/assignee
好。如果你使用它,那么你应该使用前面给出的两个存储选项中的第二个。如果您选择了第一个,那么类似:
PATCH /licences/{licenceID}
{ assignee=NULL }
POST /licences/{licenceID}/serialNumber/{serialNumber}
DELETE /licences/{licenceID}/serialNumber
POST /licences/{licenceID}/expires
您可以将这三种方法视为您为受让人决定的方式,以使您的客户更轻松。
DELETE /licences/{licenceID}/enabled
我建议:
> DELETE /licences/{licenceID}
< 201 Created
< Location: /disabled-licenses/{licenseID}
然后,URI名称空间/许可证将映射到您的域模型licenses WHERE valid==true
,而/ disabled-licenses将映射到licenses WHERE valid==false
。这没什么不对。然后,可以在HTTP级别(即通过URI路径)而不是在应用程序级别(通过检查数据库中的字段值)限制对无效许可证的访问。
我的问题是: -
/assignments/{licenceId}/{userId}
)您建议的方案主要是好的,有一些改动。
不,不是真的。
同样,如果许可证只有一个用户ID和一个序列号,那么它们的值是资源属性和/或子资源。如果建模为子资源,它们属于URI,如果属性,则属于正文。