Mule 相互验证RAML数据类型中的字段

Mule 相互验证RAML数据类型中的字段,mule,raml,Mule,Raml,我需要为请求创建一个RAML数据类型,用户可以在其中输入名字和姓氏或业务名称。如果用户输入的是名字,那么他也应该给出姓氏,而不是企业名称。这是我创建的数据类型,其中我将所有这三个字段都设置为非必需字段。这也是我所期望的JSON请求的结构 #%RAML 1.0 DataType properties: account_number: type: string required: true first_name: type: string required:

我需要为请求创建一个RAML数据类型,用户可以在其中输入名字和姓氏或业务名称。如果用户输入的是名字,那么他也应该给出姓氏,而不是企业名称。这是我创建的数据类型,其中我将所有这三个字段都设置为非必需字段。这也是我所期望的JSON请求的结构

#%RAML 1.0 DataType
properties:
  account_number:
    type: string
    required: true
  first_name:
    type: string
    required: false
  last_name:
    type: string
    required: false
  business_name:
    type: string
    required: false
这对我的用例没有任何意义。因此,我尝试将名字和姓氏定义为不同的类型,将它们设置为必需的,并通过将链接字段设置为非必需字段将其链接到父级

userType.raml

#%RAML 1.0 DataType
properties:
  account_number:
    type: string
    required: true
  name: 
    type: !include nameType.raml
    required: false
  business_name:
    type: string
    required: false
nameType.raml

#%RAML 1.0 DataType
properties:
  first_name:
    type: string
    required: true
  last_name:
    type: string
    required: true
当我嘲笑请求时,这似乎不起作用。我的问题是:

  • 我们可以在RAML中进行这种验证吗
  • 如果是,如何定义数据类型以满足要求
  • 你的答案在于类型

    此定义将具有指定的行为:

    #%RAML 1.0
    title: union types
    
    types:
      person_name:
        type: object
        properties:
          first_name:
          last_name:
      business_name:
        type: string
      entity_name: person_name | business_name
    
    
    /entity:
      get:
        queryString:
          type: entity_name
    
    现在我确实尝试了MuleSoft的模拟服务,我想你是指“模拟”。模拟服务似乎无法处理联合类型。这不是RAML的问题,而是Mocking服务的问题

  • 我们可以在RAML中进行这种验证吗
  • 如何定义数据类型以满足我的需求
  • 您的第二个问题的答案如下(但它在设计中心(Mulesoft)上不起作用,因为存在一个Bug。但在部署后,它将在本地部署的API上甚至在Mulesoft的云中心上起作用)

    如下定义数据类型(我创建了一些文件夹及其内部文件,以使其更具可行性和可读性,但您可以对其进行调整)

  • 在API文件夹类型->请求->中创建文件夹,然后文件名为nameType.ramluserType.raml,其内容如下
    • nameType.raml
    • userType.raml
    • 现在创建一个libraries文件夹,并在其中创建一个library.raml文件,该文件将包含以下内容
    • 图书馆
  • 在Mail raml中使用所有上述定义的数据类型和library.raml,如下所示
  • 以上RAML将接受两种类型的请求

    第一个请求

    {
           "accountNumber":"",
           "name":{"business_name": ""}
    }
    
    第二项请求:

    {
           "accountNumber":"",
           "name":{
                    "first_name": "",
                    "last_name": ""
                }
    }
    
    文件夹结构截图


    需要帮忙吗?
    #%RAML 1.0 Library
    
    types:
      name: !include ../types/request/nameType.raml
      user: !include ../types/request/userType.raml
          
    
    #%RAML 1.0
    version: v1
    title: Test API
    
    
    uses:
      lb-api: libraries/library.raml
    
    
    /entity:
      post:
        body:
          application/json:
            type: object
            properties:
              accountNumber:  
                type: string
              name: lb-api.name | lb-api.user
            examples:  {}
        responses:
         
          200:
            body:
              application/json:
                example: 
          400:
            body:
              application/json:
                example:
                  {"message": "Search query too long"}
    
    {
           "accountNumber":"",
           "name":{"business_name": ""}
    }
    
    {
           "accountNumber":"",
           "name":{
                    "first_name": "",
                    "last_name": ""
                }
    }