RAML 0.8环境下如何用Trait复用请求体重复字段?
用RAML 0.8 Trait封装重复请求体字段的实践方案
嘿,你找对方向了!Trait就是RAML里专门用来封装可复用API逻辑的工具,刚好能解决你遇到的请求体重复字段问题。我来给你一步步拆解怎么实现:
第一步:定义承载重复字段的Trait
在你的RAML文件顶部的traits区块里,创建一个Trait,把所有重复的请求体字段都塞进去。咱们给它起个直观的名字keepMeInformedCoreBody:
#%RAML 0.8 title: 你的KMI API version: 1.0 traits: keepMeInformedCoreBody: body: application/json: # 要和你API实际用的媒体类型一致 properties: # 这里放所有重复的字段,比如: email: type: string required: true example: jane.doe@example.com fullName: type: string required: true notificationFrequency: type: string enum: [daily, weekly, monthly] default: weekly # 把你所有重复的字段都列在这
第二步:在API端点里引用这个Trait
回到你原来的/kmi/for/{product}的POST方法,用is关键字引入刚才定义的Trait就行。如果这个端点还有自己独有的请求体字段,直接在方法里补充,RAML会自动合并Trait和端点的字段:
/kmi/for/{product}: uriParameters: product: description: | The product that want to be informed about required: true repeat: false type: string example: beans post: description: | Used to submit a keep me informed request is: [ keepMeInformedCoreBody ] # 引用Trait,复用重复字段 # 如果这个POST有专属字段,直接加在这里,会和Trait的字段合并 body: application/json: properties: productSpecificOptIn: type: boolean default: true description: Opt in to product-specific promotions
几个关键细节要注意
- 字段合并规则:Trait里的字段和端点自身的字段会自动合并,不会互相覆盖。如果出现重名字段,端点里的定义会优先生效(不过建议尽量避免重名)。
- 媒体类型匹配:Trait里的body媒体类型(比如
application/json)必须和端点里的一致,不然复用逻辑会失效。 - 多Trait复用:如果还有其他重复逻辑(比如通用响应头、通用参数),可以定义多个Trait,然后用
is: [ trait1, trait2 ]的方式同时引用。
这样一来,所有需要这些重复请求体字段的API端点,只要加一行引用代码就搞定了,再也不用一遍遍复制粘贴相同的字段定义啦!
内容的提问来源于stack exchange,提问作者Darren Guy
相关产品推荐
相关产品推荐

