Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow templating requests and response sections #3

Merged
merged 1 commit into from
Jul 29, 2016

Conversation

ryandub
Copy link
Contributor

@ryandub ryandub commented Jul 29, 2016

This needs some serious refactoring, but this is a first pass. Allows for the following in your swagger file:

      x-yoke-integration:
        operation: hello
        request-template: default
        response-template: default

Which will produce something like this after rendering:

      x-amazon-apigateway-integration:
        responses:
          ^402:.*:
            responseTemplates:
              application/json: '{"error": {"code": 402, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '402'
          ^500:.*:
            responseTemplates:
              application/json: '{"error": {"code": 500, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '500'
          ^400:.*:
            responseTemplates:
              application/json: '{"error": {"code": 400, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '400'
          ^412:.*:
            responseTemplates:
              application/json: '{"error": {"code": 412, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '412'
          ^503:.*:
            responseTemplates:
              application/json: '{"error": {"code": 503, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '503'
          ^409:.*:
            responseTemplates:
              application/json: '{"error": {"code": 409, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '409'
          ^407:.*:
            responseTemplates:
              application/json: '{"error": {"code": 407, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '407'
          ^404:.*:
            responseTemplates:
              application/json: '{"error": {"code": 404, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '404'
          ^405:.*:
            responseTemplates:
              application/json: '{"error": {"code": 405, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '405'
          ^410:.*:
            responseTemplates:
              application/json: '{"error": {"code": 410, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '410'
          ^413:.*:
            responseTemplates:
              application/json: '{"error": {"code": 413, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '413'
          ^501:.*:
            responseTemplates:
              application/json: '{"error": {"code": 501, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '501'
          ^300:.*:
            responseTemplates:
              application/json: '{"error": {"code": 300, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '300'
          ^401:.*:
            responseTemplates:
              application/json: '{"error": {"code": 401, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '401'
          ^414:.*:
            responseTemplates:
              application/json: '{"error": {"code": 414, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '414'
          ^307:.*:
            responseTemplates:
              application/json: '{"error": {"code": 307, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '307'
          ^416:.*:
            responseTemplates:
              application/json: '{"error": {"code": 416, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '416'
          ^406:.*:
            responseTemplates:
              application/json: '{"error": {"code": 406, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '406'
          ^504:.*:
            responseTemplates:
              application/json: '{"error": {"code": 504, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '504'
          ^415:.*:
            responseTemplates:
              application/json: '{"error": {"code": 415, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '415'
          ^418:.*:
            responseTemplates:
              application/json: '{"error": {"code": 418, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '418'
          ^304:.*:
            responseTemplates:
              application/json: '{"error": {"code": 304, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '304'
          ^403:.*:
            responseTemplates:
              application/json: '{"error": {"code": 403, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '403'
          ^302:.*:
            responseTemplates:
              application/json: '{"error": {"code": 302, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '302'
          ^305:.*:
            responseTemplates:
              application/json: '{"error": {"code": 305, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '305'
          ^505:.*:
            responseTemplates:
              application/json: '{"error": {"code": 505, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '505'
          default:
            responseTemplates:
              application/json: __passthrough__
            statusCode: '200'
          ^411:.*:
            responseTemplates:
              application/json: '{"error": {"code": 411, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '411'
          ^417:.*:
            responseTemplates:
              application/json: '{"error": {"code": 417, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '417'
          ^303:.*:
            responseTemplates:
              application/json: '{"error": {"code": 303, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '303'
          ^422:.*:
            responseTemplates:
              application/json: '{"error": {"code": 422, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '422'
          ^301:.*:
            responseTemplates:
              application/json: '{"error": {"code": 301, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '301'
          ^502:.*:
            responseTemplates:
              application/json: '{"error": {"code": 502, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '502'
          ^408:.*:
            responseTemplates:
              application/json: '{"error": {"code": 408, "message": $input.json(''$.errorMessage'')}}'
            statusCode: '408'
        uri: arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:<snip>:function:yokeHelloWorld:foo/invocations
        httpMethod: POST
        requestTemplates:
          application/json: "{\n  \"operation\": \"hello\",\n  \"parameters\": {\n\
            \    \"gateway\": {\n      \"id\": \"$context.apiId\",\n      \"stage\"\
            : \"$context.stage\",\n      \"request-id\" : \"$context.requestId\",\n\
            \      \"resource-path\" : \"$context.resourcePath\",\n      \"http-method\"\
            : \"$context.httpMethod\",\n      \"stage-data\": {\n        #foreach($param\
            \ in $stageVariables.keySet())\n        \"$param\": \"$util.escapeJavaScript($stageVariables.get($param))\"\
            \ #if($foreach.hasNext),#end\n        #end\n      }\n    },\n    \"requestor\"\
            : {\n      \"source-ip\": \"$context.identity.sourceIp\",\n      \"user-agent\"\
            : \"$context.identity.userAgent\",\n      \"account-id\" : \"$context.identity.accountId\"\
            ,\n      \"api-key\" : \"$context.identity.apiKey\",\n      \"caller\"\
            : \"$context.identity.caller\",\n      \"user\": \"$context.identity.user\"\
            ,\n      \"user-arn\" : \"$context.identity.userArn\"\n    },\n    \"\
            request\": {\n      \"querystring\": {\n        #foreach($param in $input.params().querystring.keySet())\n\
            \        \"$param\": \"$util.escapeJavaScript($input.params().querystring.get($param))\"\
            #if($foreach.hasNext),#end\n        #end\n      },\n      \"path\": {\n\
            \        #foreach($param in $input.params().path.keySet())\n        \"\
            $param\": \"$util.escapeJavaScript($input.params().path.get($param))\"\
            \ #if($foreach.hasNext),#end\n        #end\n      },\n      \"header\"\
            : {\n        #foreach($param in $input.params().header.keySet())\n   \
            \     \"$param\": \"$util.escapeJavaScript($input.params().header.get($param))\"\
            \ #if($foreach.hasNext),#end\n        #end\n      },\n      \"body\":\
            \ $input.json('$')\n    }\n  }\n}\n"
        credentials: arn:aws:iam::<snip>:role/<snip>
        type: aws

@gifflen
Copy link
Contributor

gifflen commented Jul 29, 2016

Looks good 🚢

@ryandub ryandub merged commit 6b016d4 into master Jul 29, 2016
@ryandub ryandub deleted the ryandub/x_yoke_integration branch September 7, 2016 13:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants