C# 更新所有资源的RESTful方式

C# 更新所有资源的RESTful方式,c#,rest,api,asp.net-core,C#,Rest,Api,Asp.net Core,我想对API公开的所有资源进行一个公共更改。例如,假设一个API公开了一个类的所有学生,您希望为所有学生设置一个公共课程 一种方法是查询API,并逐个或批量更新资源的属性。但是,这需要首先获取所有资源,然后更新它们的属性,然后发送和发布请求 相反,我对RESTful设计感兴趣,您可以在其中发送属性及其值,这些属性和值将应用于通过API公开的所有资源,例如,前面示例中的学生 关于如何通过RESTful设计实现这一点,有什么建议吗 更新1: 换句话说,我希望将所有资源的一个字段更新为公共值,而不必首

我想对API公开的所有资源进行一个公共更改。例如,假设一个API公开了一个类的所有学生,您希望为所有学生设置一个公共课程

一种方法是查询API,并逐个或批量更新资源的属性。但是,这需要首先获取所有资源,然后更新它们的属性,然后发送和发布请求

相反,我对RESTful设计感兴趣,您可以在其中发送属性及其值,这些属性和值将应用于通过API公开的所有资源,例如,前面示例中的学生

关于如何通过RESTful设计实现这一点,有什么建议吗

更新1: 换句话说,我希望将所有资源的一个字段更新为公共值,而不必首先获取资源。因此,我不想实现以下内容,因为我有数百万资源,我不想先获取它们的所有ID,然后创建一个json对象,如下所示:

PATCH /items
[ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]

如果学生已经被分配到一个班级,那么我认为用如下方式整体改变他们不会有问题:

/api/class/123/updateCourse?newCourse=456

class ClassController
{
   public IResult UpdateCourse(int class, int newCourse)
使用补丁。有关更多详细信息,请参阅和

样本:

PATCH /api/classes/123/students
[ { id: 1, name: 'foo' }, { id: 2, name: 'bar' } ]
您必须选择如何处理您的错误响应,或者使其原子化,或者不原子化

对于atomic,失败的行将使整个请求变为400。 对于非原子的,您将有200个来自服务器的错误详细信息。 从API消费者的角度来看,这两种情况各有利弊。应该根据您的用例做出决定

更新1:

通过不向没有特定ID的端点提供列表,可以对整个集合执行该操作

提供这样的JSON主体应该将所有提供的属性设置为为该集合中每个记录指定的值:

PATCH /api/classes/123/students
{ courses: [ commonCourse1, commonCourse2 ] }

您仍然可以像/items/update/all一样创建端点并传递您的值:

POST /api/items/update/all 
{
  "value": 123
}
接下来,你只需要正确处理它。例如,只需编写如下SQL查询:

UPDATE Items
SET value=POST["value"];

看看吧。我建议你使用带有列表的补丁方法。请看我的更新。我仍然认为我的答案是正确的。你不想改变一个学生,你想改变一个班级,但这并不全面;e、 例如,你怎么能用这个方法将每个学生的姓氏设置为空字符串?你仍然依赖于班级,但在我的场景中,可能会出现我没有班级同义词的情况,例如,我的问题中的姓名,哈米德我用课堂作为例子来回答你的问题,你想在课堂上为所有学生设置一个共同的课程。实际上,您可以将此方法用于任何集合。至于您提到的名称,我看到您为每个项目指定了不同的名称,但我从您的问题中了解到,您希望将所有资源的一个字段更新为一个公共值?我在这里有点困惑。是的,我想将所有资源的一个字段更新为一个公共值。@Hamed如果是这样,那么我提供的解决方案基本上就是这样。只需指定所需的值并将其修补到集合中即可。我提供的示例将更新123班的每个学生,使他们的课程更新为请求正文中提供的公共值。如果您想为每个学生指定课程,而不管他们的班级如何,您可以从url中删除课程。我不明白你为什么一开始就提到课程。