一个资源类型如何继承多个类型?

How can a resourceType inherit from multiple types?

目标:为 CRUD 端点创建资源类型,不再赘述。

(在 Anypoint Studio 和 Mulesoft 设计中心使用 RAML 1.0)

让我们为单个操作端点启动几个资源类型:

resourceTypes:
  getItem:
    get: 
      responses:
            200:
              body:
                application/json
  postItem:
    post:
      responses:
        201:
          body: null
  deleteItem:
    delete:
      responses:
        200:
          body: null 

到目前为止,还不错。

现在我想为允许 GET 和 DELETE 请求的端点创建 resourceType。这是有效的:

  getDeleteItem:
    type: getItem
    delete:
      responses:
        200:
          body: null

...但我不得不重复 deleteItem 中的代码,我不喜欢这样。

这些方法不起作用:

# the syntax for a union of types, does not work for resourceTypes
  getDeleteItem:
    type: getItem | deleteItem
# no error here, but everything after the first type reference is ignored
  getDeleteItem:
    type: { getItem, deleteItem }

有没有更好的方法?

我想到了一个丑陋的解决方法("base" resourceTypes 每个都将它们的类型设置为一个变量,因此它们可以串在一起),但它似乎会导致 Mulesoft 设计中心出现不一致的错误和崩溃.

我最终确实找到了一个明确的答案:使用可选方法(动词)。

创建一个包含所有 3 个动词的资源类型,而不是原来的 3 个资源类型。根据需要标记每个动词:false 或在动词名称后附加问号。

resourceTypes:
  myResourceType:
    get?: 
      responses:
            200:
              body:
                application/json
    post?:
      responses:
        201:
          body: null
    delete?:
      responses:
        200:
          body: null 

像往常一样在端点使用资源类型,并在端点下为要使用的每个动词添加一行。

此示例创建一个名为 "myResource" 的端点,它接受 GET 和 POST 请求,但不接受 DELETE 请求。

/myResource:
  type:
    myResourceType
  get:
  post:

GET 和 POST 继承了我们在 resourceType 中定义的所有内容。我们可以自由地覆盖或添加端点处的每个动词。

您还可以创建额外的资源类型并将其作为根类型,但我在尝试使用具有继承资源类型的变量时发现问题,并且可选方法似乎足够灵活以满足我的目标。