MuleSoft 使用 RAML 片段将 RAML 规范导入 Anypoint Studio

Posted

技术标签:

【中文标题】MuleSoft 使用 RAML 片段将 RAML 规范导入 Anypoint Studio【英文标题】:MuleSoft Importing RAML Specification into Anypoint Studio With RAML Fragments 【发布时间】:2018-12-07 17:33:27 【问题描述】:

我们已升级到 Crowd Release 平台,现在正在创建 API 规范,这些规范使用 MuleSoft 推荐的片段。但是,我们可以导入 RAML,但不能生成流。没有错误 - 没有警告 - 没有。

我已经举了一个例子。

api.raml

#%RAML 1.0
version: v1
title: api
types:
  contactDetails: !include library/types/contactDetails.raml

/contact:
  post:
    body: 
      application/json:
        type: contactDetails

types-library.raml

#%RAML 1.0 Library

types:
  telephoneNumber: !include ../exchange_modules/fragment-flows-problem-fragment/1.0.0/telephone-number.raml

contactDetails.raml

#%RAML 1.0 DataType
uses:
  contactDetails: ../types-library.raml

properties:
  name:
    type: string
  telephone:
    type: contactDetails.telephoneNumber

电话号码.raml(片段)

#%RAML 1.0 DataType

description: |
  **includes validation applicable to a contact telephone number**
  ***
  - Minimum length 9
  - Maximum length 15

type: string
displayName: Telephone Number
minLength: 9
maxLength: 15
pattern: ^[\d ]+$
examples:
  telephoneNumber1: "01433000000"
  telephoneNumber2: "01433 000000"

我只是补充一点,RAML 在设计中心和 Exchange 中都有效。

补充一句,如果我们去掉contactDetails.raml中的uses语句,那么contactDetails数据类型就无法识别了。

如果有人在这里指出问题或解释 Anypoint Studio 如何导入使用非常有用的片段的规范。

谢谢。

【问题讨论】:

【参考方案1】:

这是一个迟到的回复,但我今天碰巧遇到了这个问题,我的搜索让我想到了你的问题。

我的问题是contactDetails.raml 文件中缺少!include。我在 Anypoint Studio 中遇到了同样的问题,我的解决方法是:

#%RAML 1.0 DataType
uses:
  contactDetails: !include ../types-library.raml

properties:
  name:
    type: string
  telephone:
    type: contactDetails.telephoneNumber

很遗憾,Anypoint Studio 没有提供任何关于为什么会出现 RAML 错误的有用信息,而只是告诉您出了点问题。

【讨论】:

你不应该使用!include来加载库,见这里:blog.apimatic.io/…

以上是关于MuleSoft 使用 RAML 片段将 RAML 规范导入 Anypoint Studio的主要内容,如果未能解决你的问题,请参考以下文章

Mulesoft RAML - 在嵌套 XSD 文件上具有请求主体架构和响应主体架构的 Api 规范

在线提供示例 RAML [关闭]

RAML中基于查询参数的动态调用

在 RAML 中验证查询参数

如何在 MuleSoft 中将分支合并为 master(Anypoint 设计中心)

Anypoint Platform RAML模拟服务中的响应标头“Content-Type”不正确