为get / post创建动态键/值的RAML文件

时间:2015-02-25 23:28:37

标签: json mule raml

我正在使用Mule应用程序从另一个系统获取数据,该数据由HTTP端点调用,使用带有jersey api的java来获取其余组件。

下面给出了示例输入数据,这里的键和值不是固定的,它可能会根据用户请求而有所不同。数组大小将增加可能是2到n个条目。它适用于基于Mule和Java rest的组件。

输入JSON数据:

[
    {
        "Company": "BEG1",
        "Account": "10011",
        "Deptid": "111",
        "Location": "SM1",
        "Transaction Date": "2014-07-15",
        "Description": "Invoice1",
        "Debit": 0,
        "Credit": 13.46,
        "Invoice Nbr": "16824321"
    },
    {
        "Company": "BEG92",
        "Account": "10092",
        "Deptid": "222",
        "Location": "SL2",
        "Transaction Date": "2014-07-19",
        "Description": "Invoice End2",
        "Debit": 13.46,
        "Credit": 0,
        "Invoice Nbr": "168243292"
    }
]

计划使用RAML迁移到APIkit:如何为上述情况制作RAML模板?由于密钥是动态的,所以这看起来并不简单。

2)对于GET采用相同的方法,我将获取我的get请求的数据,我不确定什么是密钥及其相应的值,只是我做的是获取数据,解析它并将其发送到用户。如何在这种情况下创建RAML模板。使用RAML的mule APIkit会在这里工作吗?

我现有的代码:

@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public List<GLExport> postOperation(@Payload String content) throws ParseException {    
    JSONParser jsonParser = new JSONParser();
    Object jsonObjectInstance =null;
    jsonObjectInstance = jsonParser.parse(new StringReader(content));
    ...
    return glExportList;

<http:inbound-endpoint exchange-pattern="request-response" host="${hostname}" port="${glport}" path="QBJournalExport/QBGLRest" doc:name="HTTP"/>
<jersey:resources doc:name="REST"> 
    <component class="com.qb.rest.GLExportService"/>
</jersey:resources> 

1 个答案:

答案 0 :(得分:3)

看来你的问题更多的是关于JSON Schema而不是RAML。实质上,您正在询问如何在JSON模式中支持未知字段。

答案是添加:

"additionalProperties": true

到您的JSON Schema对象定义。

我强烈建议,如果已知字段集,则在模式中明确声明它们:您的API用户会感谢您。

此外,如果保证其中一些字段存在,请将它们标记为required

APIkit在处理其他属性时应该没有问题。