REST服务中的建模操作

Suh*_*has 7 rest

我知道以前曾问过这类问题.我有我的问题的解决方案,我想知道我是否在任何地方打破REST或HTTP主体.

在我的系统中,我有一个member支持常规GET/POST/PUT操作的资源.会员的状态为ActiveDisabled.我需要模拟禁用用户的操作.我理解为什么从REST角度来看,以下是一个坏主意

POST api/member/john.smith/disable
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一个解决方案来接受代表禁用成员请求的资源,如下所示

public class DisableMemberRequest
{
    public string Username {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

然后是POST上面的资源

POST api/DisableMemberRequest
Run Code Online (Sandbox Code Playgroud)

虽然这种方法听起来很合理,但我认为这在干净的API接口方面是不对的.上述请求的响应是否应该是200 OK或者201 Created或者是有争议的202 Accepted.

我在想,我会创建一个名为的新资源,DisabledMember并且PUT在此资源上将意味着应该禁用特定成员,如下所示

PUT api/disabledmember/john.smith
Run Code Online (Sandbox Code Playgroud)

从REST/HTTP的角度来看,这看起来是一个非常有效的设计.但我不是专家,并希望与那些长期坚持这样做的人一起验证这一点.

编辑

我在与此页面上的其他程序员交互后添加了这些详细信息.禁用该成员的过程不仅仅是关于在该成员上设置状态标志.禁用成员时,还需要触发其他工作流.

Dar*_*ler 4

我喜欢做这样的事情的一种方法是定义一个代表一组禁用成员的资源。要禁用某个成员,您可以将该成员添加到禁用成员集中。它可能看起来像这样。

POST /api/DisabledMembers
Content-Type: text/uri-list

http://example.org/api/members/john.smith
Run Code Online (Sandbox Code Playgroud)

如果你想反转操作,你可以这样做

POST /api/ActiveMembers
Content-Type: text/uri-list

http://example.org/api/members/john.smith
Run Code Online (Sandbox Code Playgroud)

这种方法的好处是,这样做GET /api/DisabledMembers是一件非常自然的事情。此外,通过使用,text/uri-list可以轻松地同时禁用/重新激活一组成员。