2016-07-06 2 views
0

Я пишу файл swagger для AWS API Gateway. Я должен использовать блок текста для интеграции для каждой конечной точки. Это как один оконечный в настоящее времяКак повторно использовать строковый блок в swagger

'/products/{productId}': 
    get: 
    tags: 
     - product 
    summary: Get detailed information about a product 
    consumes: 
     - application/json 
    produces: 
     - application/json 
    parameters: 
     - name: productId 
     in: path 
     required: true 
     type: string 
    responses: 
     '200': 
     description: 200 response 
     schema: 
      type: array 
      items: 
      $ref: '#/definitions/product' 
     '404': 
     description: product not found 
     schema: 
      type: array 
      items: 
      $ref: '#/definitions/product' 
    x-amazon-apigateway-integration: 
     requestTemplates: 
     application/json: > 
      ## See 
      http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html 

      ## This template will pass through all parameters including path, 
      querystring, header, stage variables, and context through to the 
      integration endpoint via the body/payload 

      #set($allParams = $input.params()) 

      { 

      "body-json" : $input.json('$'), 

      "params" : { 

      #foreach($type in $allParams.keySet()) 
       #set($params = $allParams.get($type)) 
      "$type" : { 
       #foreach($paramName in $params.keySet()) 
       "$paramName" : "$util.escapeJavaScript($params.get($paramName))" 
        #if($foreach.hasNext),#end 
       #end 
      } 
       #if($foreach.hasNext),#end 
      #end 

      }, 

      "stage-variables" : { 

      #foreach($key in $stageVariables.keySet()) 

      "$key" : "$util.escapeJavaScript($stageVariables.get($key))" 
       #if($foreach.hasNext),#end 
      #end 

      }, 

      "context" : { 
       "account-id" : "$context.identity.accountId", 
       "api-id" : "$context.apiId", 
       "api-key" : "$context.identity.apiKey", 
       "authorizer-principal-id" : "$context.authorizer.principalId", 
       "caller" : "$context.identity.caller", 
       "cognito-authentication-provider" : "$context.identity.cognitoAuthenticationProvider", 
       "cognito-authentication-type" : "$context.identity.cognitoAuthenticationType", 
       "cognito-identity-id" : "$context.identity.cognitoIdentityId", 
       "cognito-identity-pool-id" : "$context.identity.cognitoIdentityPoolId", 
       "http-method" : "$context.httpMethod", 
       "stage" : "$context.stage", 
       "source-ip" : "$context.identity.sourceIp", 
       "user" : "$context.identity.user", 
       "user-agent" : "$context.identity.userAgent", 
       "user-arn" : "$context.identity.userArn", 
       "request-id" : "$context.requestId", 
       "resource-id" : "$context.resourceId", 
       "resource-path" : "$context.resourcePath" 
       } 
      } 
     uri: >- 
     arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:87126xxxxxxx:function:lambdatest_v3/invocations 
     passthroughBehavior: never 
     responses: 
     default: 
      statusCode: '200' 
     httpMethod: POST 
     type: aws 

ищет часть о й-амазонке-apigateway-интеграции необходимо повторить, как и для любого пути. Как я могу не написать это каждый раз. Возможно ли иметь определение строки, по крайней мере, удерживать часть около application/json?

Я попытался создать определение строки, но он не работал на AWS импорта:

definitions: 
    MyAPI: 
    type: string 
    default: > 
     #Magic 

     #set($allParams = $input.params()) 

     { 

     "body-json" : $input.json('$'), 

     "params" : { 

     #foreach($type in $allParams.keySet()) 
      #set($params = $allParams.get($type)) 
     "$type" : { 
      #foreach($paramName in $params.keySet()) 
      "$paramName" : "$util.escapeJavaScript($params.get($paramName))" 
       #if($foreach.hasNext),#end 
      #end 
     } 
      #if($foreach.hasNext),#end 
     #end 

     }, 

     "stage-variables" : { 

     #foreach($key in $stageVariables.keySet()) 

     "$key" : "$util.escapeJavaScript($stageVariables.get($key))" 
      #if($foreach.hasNext),#end 
     #end 

     }, 

     "context" : { 
      "account-id" : "$context.identity.accountId", 
      "api-id" : "$context.apiId", 
      "api-key" : "$context.identity.apiKey", 
      "authorizer-principal-id" : "$context.authorizer.principalId", 
      "caller" : "$context.identity.caller", 
      "cognito-authentication-provider" : "$context.identity.cognitoAuthenticationProvider", 
      "cognito-authentication-type" : "$context.identity.cognitoAuthenticationType", 
      "cognito-identity-id" : "$context.identity.cognitoIdentityId", 
      "cognito-identity-pool-id" : "$context.identity.cognitoIdentityPoolId", 
      "http-method" : "$context.httpMethod", 
      "stage" : "$context.stage", 
      "source-ip" : "$context.identity.sourceIp", 
      "user" : "$context.identity.user", 
      "user-agent" : "$context.identity.userAgent", 
      "user-arn" : "$context.identity.userArn", 
      "request-id" : "$context.requestId", 
      "resource-id" : "$context.resourceId", 
      "resource-path" : "$context.resourcePath" 
      } 
     } 

, а затем в пути:

x-amazon-apigateway-integration: 
    requestTemplates: 
     application/json: 
     $ref: '#/definitions/MyAPI' 
    uri: >- 
     arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:8712xxxxxxxx:function:lambdaTest_v3/invocations 
    passthroughBehavior: never 
    responses: 
     default: 
     statusCode: '200' 
    httpMethod: POST 
    type: aws 
+0

Это не может ответить на ваш вопрос прямо, но знаете ли вы, что вы можете экспортировать это как JSON из стадии API шлюза? –

+0

Да, я пытаюсь сделать обратное. У меня есть файл с контролируемой версией swagger, и у меня есть система для импорта обновлений для файла swagger на шлюз API с помощью 'aws apigateway import-rest-api'. Поскольку интеграция шлюзов будет повторяться для всех конечных точек, я не хочу повторять тот же блок снова. Я не мог понять, как это сделать. Теперь я добавляю абзац интеграции во время процесса развертывания. – cnvzmxcvmcx

+0

А, ладно, извините, я неправильно понял, что вы делали. Я еще не использовал методы импорта api, поэтому я, вероятно, не могу помочь здесь. –

ответ

0

http://azimi.me/2015/07/16/split-swagger-into-smaller-files.html

Если вы» повторно написав спецификацию Swagger API, и она становится слишком большой, вы можете разбить ее на несколько файлов. Swagger поддерживает JSON Reference (черновик) для использования удаленных и локальных частей JSON для создания документа Swagger .

JSON Ссылка Обзор

JSON Reference использует специальный ключ $ реф определить «ссылка» к части JSON. Например следующий JSON имеет ссылку на http://example.com/foo.json:

Смежные вопросы