Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Reference API Gateway Models in CloudFormation

DZone's Guide to

Reference API Gateway Models in CloudFormation

We take a look at defining API Gateway Models in CloudFormation using JSON. Read on to find out more.

· Cloud Zone
Free Resource

Site24x7 - Full stack It Infrastructure Monitoring from the cloud. Sign up for free trial.

API Gateway Models are defined using JSON Schema. You can reference a Model inside another Model using the $ref field. If you are familiar with the OpenAPI Specification fka Swagger, you may have seen something like this:

{
  "$ref": "#/definitions/User"
}

To make model references work with API Gateway, you need to provide an absolute reference that is predefined by AWS: https://apigateway.amazonaws.com/restapis/$ApiId/models/$ModelName

Let’s translate this to a CloudFormation template:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "Lambda and API Gateway",
  "Resources": {
    "RestApi": {
      "Type": "AWS::ApiGateway::RestApi",
      [...]
    },
    "UserModel": {
      "Type": "AWS::ApiGateway::Model",
      "Properties": {
        "ContentType": "application/json",
        "Name": "User",
        "RestApiId": {"Ref": "RestApi"},
        "Schema": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "type": "object",
          "title": "User",
          "additionalProperties": false,
          "properties": {
            "uid": {
              "type": "string"
            },
            "email": {
              "type": "string"
            },
            "phone": {
              "type": "string"
            }
          },
          "required": ["uid", "email", "phone"]
        }
      }
    },
    "UsersModel": {
      "Type": "AWS::ApiGateway::Model",
      "Properties": {
        "ContentType": "application/json",
        "Name": "Users",
        "RestApiId": {"Ref": "RestApi"},
        "Schema": {
          "$schema": "http://json-schema.org/draft-04/schema#",
          "type": "array",
          "title": "Users",
          "items": {
            "$ref": {"Fn::Join": ["", ["https://apigateway.amazonaws.com/restapis/", {"Ref": "RestApi"}, "/models/", {"Ref": "UserModel"}]]}
          }
        }
      }
    },
    "RestApi": {
      "Type": "AWS::ApiGateway::RestApi",
      "Properties": {
        "Name": "API Gateway ToDo"
      }
    }
  }
}


That’s it. Now you can build sophisticated API Gateway models that reference each other in CloudFormation.

Site24x7 - Full stack It Infrastructure Monitoring from the cloud. Sign up for free trial.

Topics:
services ,models ,amazon web services ,gateway ,api ,amazon ,aws

Published at DZone with permission of Michael Wittig, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}