所以我想创建一个评论系统,它的端点类似于:
mysite.com/comments/12345
因此,我希望创建评论的用户能够关闭评论,这会阻止对评论的任何其他回复。我们只是说服务器方法将命名为"关闭"。
我的问题:
我可能会使用ASP.Net Web API作为平台,虽然这是REST,所以我认为这应该与解决方案无关。
答案 0 :(得分:1)
可能的解决方案是添加一个字段“关闭”。或类似的
您可能已经有一个字段user
或author
或类似的字段,用于指定执行请求的人员。
所以当你创建评论时
POST mysite.com/comments HTTP/1.1
{
"body": "hey sway",
"user": "John",
"closed": "no"
}
这是使用JSON,只是一个例子,我不知道你的服务器是如何实现的,但这并不重要。
然后,关闭'评论你将对该资源进行PATCH(部分更新)
PATCH mysite.com/comments/12345
{
"closed": "yes"
}
根据服务器的实现方式,仅提供需要更新/编辑的字段就足够了。但是,因为您只希望评论的创建者能够将其关闭,所以您应该在请求中包含user
:
PATCH mysite.com/comments/12345
{
"user": "John"
"closed": "yes"
}
上面的示例假定创建的评论的资源ID为12345
,如您的示例所示。
然后在服务器上,您可以检查是否允许John
关闭评论。
总结一下
网址是什么样的?
网址与GET
相同身体含有什么?
需要更新/修改的所有字段以及user
我使用什么Http Verb?
PATCH在这里最有意义,因为您正在部分更新资源。
答案 1 :(得分:0)
如果关闭评论的信息是资源的一部分,您可以PUT
新资源版本:
PUT /comments/12345 HTTP/1.1
{
"id" : "12345",
"content" : "something",
"replies" : [ "foo", "bar" ],
"closed" : true
}
根据HTTP Specification,您必须PUT
整个资源:
如果Request-URI引用已存在的资源,则为 封闭实体应该被视为该实体的修改版本 驻留在原始服务器上。
如果您不想发送整个资源,可以使用PATCH
:
PATCH /comments/12345 HTTP/1.1
{
"op" : "replace",
"path" : "/closed",
"value": true
}
有关详细信息,请参阅JSON Patch draft。