用于发布实体数组和单个实体的Restful端点命名约定

时间:2018-03-16 10:59:34

标签: rest asp.net-web-api

我想在我的控制器上公开2个新端点。 1具有添加单个实体的方法签名:

[HttpPost]
[Route("v1/entities")]
public IHttpActionResult AddEntity([FromBody] Entity entity)

另一个几乎相同,只是它接受IEnumerable来添加多个实体:

[HttpPost]
[Route("v1/entities")]
public IHttpActionResult AddEntities([FromBody] IEnumerable<Entity> entities)

显然,这不会起作用,因为它不知道要采取什么行动方法。那么我怎样才能解决这两个问题呢?我应该简单地将第二条路线重命名为&#34; v1 / entitieslist&#34;?

由于

2 个答案:

答案 0 :(得分:0)

最简单的方法是将第一个更改为v1/entity,因为您不处理多个问题。关于'纯'REST有一个有趣的讨论here,在做这类事情时是幂等的。我倾向于不使用批量POST,更喜欢一次POST一个。

答案 1 :(得分:0)

在你的情况下,我不担心纯REST。如果您有充分的理由在一次调用中创建多个实体,那么就这样做。

您有几个选择:

  1. 您只能创建一个带有对象列表的端点。您的列表也可以包含一个元素,因此这涵盖了两种情况。

  2. 您可以创建单独的端点,并且您已经知道如何执行此操作

  3. 最大的挑战将是决定你想要回归什么。在POST中,我更喜欢返回已创建资源的唯一标识符,但是当您进行批量创建时,某些可能会有效,有些可能会失败,因此您需要确定将要发生的情况并确保涵盖所有可能的方案。

    你的实体相关吗?您想以某种方式创建实体并在第一次遇到问题时回滚吗?这些是您需要回答的问题