将变量类型作为REST中的对象属性是否合适?

时间:2017-09-27 17:04:27

标签: c# asp.net rest swagger variant

在我的场景中,我发现自己创建了一个REST资源,表示要由工作流引擎运行的任务。我创建了以下资源:

[POST|GET] /api/tasks

任务具有以下形式:

{
  "Id": 123456789,
  "Web": "https://foo/webfe/tasks/123456789",
  "Description": {
    "Scenario": "TaskA",
    "Parameters": {
      "GlobalParameter": "SomeCommonThing",
      "TaskASpecificParameter1": "SomeThingOnlyMeaningfulForTaskA",
      "TaskASpecificParameter2": "SomeOtherThingOnlyMeaningfulForTaskA"
    }
  }
}

值得注意的是,我有 ?. Description.Parameters []

此参数字段本质上是一个键值字典,但在逻辑上以与?.Description.Scenario的值直接相关的方式进行模式化。

这是在REST中有意义的东西还是一个坏主意。作为链接资源,这会更有意义吗?子资源怎么样?

奖金问题:

如何使用Swagger / Swashbuckle以可为客户端发现的方式在C#/ ASP.NET中执行此操作?

1 个答案:

答案 0 :(得分:0)

可能有助于将其可视化,就像为数据库模式创建它一样。在“任务”表中,您不会将参数列表作为可能无限数量的列。你将有两个表,一个用于任务,一个用于参数,你将拥有一个从参数到任务的外键(多对一)。以同样的方式,您将拥有一个{J}接受TaskId并为您提供相关参数的API端点。

在此之后,您可以通过api/Parameters/api/Tasks/{TaskId}/Parameters在API中轻松实现它,其中/api/Parameters?TaskId={TaskId}会返回单个参数。