当您需要使用REST api的动词时,最好的做法是什么?

Bar*_*xto 5 api rest

我正在公开一个REST API,只要你做CRUD(创建,更新,删除),它就会非常容易和顺利.但是我有这个Tickets返回一个票证列表(get),一个Ticket/{id}获取特定项目(get)和一个激活方法(put),它将票证状态从未激活更改为激活.

现在我需要让REST'消费者'能够做类似的事情(在ws中会被称为:GetAndActivateRandomTicket(),它让我想知道,应该在REST上描述什么?这是一个帖子? ?get ?.目标是获得随机数量的门票,并将其状态设置为活动状态.类似于获取和放置的东西,但事先不知道放置的{id}.

应该是/ Tickets?activate = true&amount = 5?什么动词?我应该使用动词而不是名词吗?这个问题的"最佳实践"是什么?

谢谢.

Bar*_*xto 1

我提取了这个:

任何东西都可以成为资源,包括事务、会话和其他此类非域实体:)

并与:

票证激活资源。

[POST] 查询参数为 amount 将返回一组激活的随机门票。并返回资源 url,这样您就可以得到 /ticket/id=1,2,3,4,5 [GET] 将正常返回票证,并使用可选的 id 过滤器返回多个票证 [PUT] 将使用还过滤 id 并根据参数设置激活 true 或 false。

所以我可以这样做:

[post]
/ticket/activation/?amount=5
Run Code Online (Sandbox Code Playgroud)

返回的资源将类似于 /ticket?id=1,2,3,4,5 这样我就可以发出 get 请求。

[get]
/ticket?id=1,2,3,4,5

[put]
/ticket/activation?id=1,2,3,4,5&deActivate [OR]
/ticket/activation?id=1,2,3,4,5&activate
Run Code Online (Sandbox Code Playgroud)

我想这是这个问题最优雅、最RESTfull、最清晰的解决方案,我想分享以供将来参考。另外,如果您认为这种方法有问题,请随时发表评论。