【问题标题】:How to send different RAML response with different input query parameters如何使用不同的输入查询参数发送不同的 RAML 响应
【发布时间】:2018-07-11 09:53:13
【问题描述】:

我有一个关于 RAML 发送不同响应的问题。在下面的 RAML 中,我想根据查询参数发送响应。如果我的查询参数 (flightId) 是“F001”,我应该只得到数据 F001 的响应。但是我得到了响应中指定的所有数据的响应。我可以知道如何过滤不需要的数据。

#%RAML 1.0
baseUri: https://mocksvc.mulesoft.com/mocks/9b7a0390-ecf4-4ff4-b307-0b7d87ed9495 # baseUri: https://mocksvc.mulesoft.com/mocks/b133e2e4-f0e3-49a0-b224-8f36358e04ca # 
title: FlightApi-Rajesh
version: 1.0.1
/{flightId}:
description: Flight Id
get:

  queryParameters:
    flightId: 
      displayName: flightId
      type: string
      required: true
      description: Flight name with its ID
      example: F0001

  description: Get the flight with `flightId = {flightId}`

  responses:
    200:
      body:
        application/json:
          example: |
            {
              "F001":{
                "flightName": "Ingido",
                "Location": "Mumbai",
                "flightId": "F001",
                "Destination":"Delhi",
                "timing":"19:55 HRS"
            },
            "F002":{
              "flightName": "SpiceJet",
                "Location": "Pune",
                "flightId": "PNQ012",
                "Destination":"Chennai",
                "timing":"15:00 HRS"
            }
            }
    404:
      body:
        application/json:
          example: |
            {"message": "Flight not found"}

【问题讨论】:

    标签: api mule raml mule-esb


    【解决方案1】:

    RAML 是 REST API 的设计规范。当您运行基于 RAML 的模拟服务时,它不具备生成动态响应的能力,而这正是您正在尝试做的。请参考 Mule 论坛确认这一点 - https://forums.mulesoft.com/questions/60487/can-the-example-in-the-raml-be-dynamic.html

    如果您的要求是创建具有动态响应的模拟服务,还有其他方法可以实现此类模拟服务 - SOAPUI、Dynatrace 等。

    如果您的要求是使用 RAML 并尝试动态响应,则必须基于 RAML 创建一个 Mule ESB 项目。然后,您可以根据 Mule 配置接收到的输入实现动态响应。

    http://workshop.tools.mulesoft.com/modules/module3_lab1#step-1-create-a-new-mule-project-and-import-raml-definition

    【讨论】:

    • 谢谢马希卡。这有帮助。
    【解决方案2】:

    您可能希望将示例更改为此。模拟端点每次都会返回您的示例响应,因此如果您只期望一个匹配项,则示例应该反映这一点。请记住这一点,因为您将无法根据用户输入修改模拟 API 的响应

    /{flightId}:
      description: Flight Id
      get:
        queryParameters:
          flightId: 
            displayName: flightId
            type: string
            required: true
            description: Flight name with its ID
            example: F0001
      responses:
        200:
          body:
            application/json:
              example: |
                {
                  "F001":{
                    "flightName": "Ingido",
                    "Location": "Mumbai",
                    "flightId": "F001",
                    "Destination":"Delhi",
                    "timing":"19:55 HRS"
                  }
                }
        404:
          body:
            application/json:
              example: |
                {"message": "Flight not found"}
    

    如果您从数据库连接器收到了这些数据,即使返回了一条记录,您也会得到一个结果列表。你需要像这样转换它:

    %dw 1.0
    %output application/json
    
    %vars flight = (payload filter $.flightId == flowVars.flightId)[0]
    ---
    {
      (flowVars.flightId): flight
    }
    

    【讨论】:

    • 感谢您的回复。我可以知道我需要在哪个文件中添加这个吗?仅使用 RAML 文件给定的输入参数,我们不能得到一个输出吗?
    • 您是在询问模拟 API 还是实际实现?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2018-01-20
    • 1970-01-01
    • 2016-06-14
    • 2019-10-19
    • 2021-09-08
    • 1970-01-01
    相关资源
    最近更新 更多