Over a million developers have joined DZone.

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

Download this eBook outlining the critical components of success for SaaS companies - and the new rules you need to play by.  Brought to you in partnership with NuoDB.

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.

Learn how moving from a traditional, on-premises delivery model to a cloud-based, software-as-a-service (SaaS) strategy is a high-stakes, bet-the-company game for independent software vendors. Brought to you in partnership with NuoDB.

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.

The best of DZone straight to your inbox.

SEE AN EXAMPLE
Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.
Subscribe

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

{{ parent.tldr }}

{{ parent.urlSource.name }}