Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scaling a Swagger-based Web API with Google Cloud Endpoints - Nordic APIs Platform Summit 2016

Scaling a Swagger-based Web API with Google Cloud Endpoints - Nordic APIs Platform Summit 2016

Web APIs are and more often specified with API definition languages like Swagger (now named Open API Spec), as it can help you generate nice interactive documentation, server skeletons, and client SDKs, mocks, and more, making it simpler to get started both producing and consuming an API.

In this session, Guillaume will demonstrate how to define a Web API with Swagger / Open API Spec, and scale it using Cloud Endpoints, on the Google Cloud Platform.

Guillaume Laforge

October 26, 2016
Tweet

More Decks by Guillaume Laforge

Other Decks in Technology

Transcript

  1. Proprietary + Confidential
    Scale a Swagger-based Web API
    with Google Cloud Endpoints
    Guillaume Laforge
    Staff Developer Advocate
    Google Cloud Platform
    @glaforge
    Slides available here:
    bit.ly/endpoints-nordic
    Cloud Endpoints
    https://cloud.google.com/endpoints/

    View Slide

  2. Proprietary + Confidential
    Scale a Swagger-based Web API
    with Google Cloud Endpoints
    Guillaume Laforge
    Staff Developer Advocate
    Google Cloud Platform
    @glaforge
    What does
    Swagger bring
    to the table?

    View Slide

  3. Proprietary + Confidential
    Scale a Swagger-based Web API
    with Google Cloud Endpoints
    Guillaume Laforge
    Staff Developer Advocate
    Google Cloud Platform
    @glaforge
    How do we Scale
    in the Cloud?
    Google-style!

    View Slide

  4. Proprietary + Confidential
    Scale a Swagger-based Web API
    with Google Cloud Endpoints
    Guillaume Laforge
    Staff Developer Advocate
    Google Cloud Platform
    @glaforge
    So what’s
    Cloud Endpoints

    View Slide

  5. Proprietary + Confidential
    @glaforge
    Ok, OpenAPI Specs!

    View Slide

  6. Proprietary + Confidential
    @glaforge
    Ok, OpenAPI Specs!
    Cloud
    Endpoints
    mastermind!

    View Slide

  7. Proprietary + Confidential
    Benefits of OpenAPI Specs
    Contract
    First is
    Trendy !
    @glaforge

    View Slide

  8. Contract as
    the Source
    of Truth

    View Slide

  9. Facilitates Team
    Communication,
    Collaboration

    View Slide

  10. Great for Tooling

    View Slide

  11. Great for Tooling
    Client SDKs
    Server skeletons

    View Slide

  12. Great for Tooling
    Client SDKs
    Server skeletons
    Test stubs
    Static & live mocks

    View Slide

  13. Great for Tooling
    Client SDKs
    Server skeletons
    Test stubs
    Static & live mocks
    Static documentation

    View Slide

  14. Great for Tooling
    Client SDKs
    Server skeletons
    Test stubs
    Static & live mocks Sandbox & live playground
    Static documentation
    API Portal w/ provisioning

    View Slide

  15. Great for Tooling
    Client SDKs
    Server skeletons
    Test stubs
    Static & live mocks Sandbox & live playground
    Static documentation
    API Portal w/ provisioning
    Be careful with code generation
    overwriting customisations

    View Slide

  16. Proprietary + Confidential
    Scale a Swagger-based Web API
    with Google Cloud Endpoints
    Guillaume Laforge
    Staff Developer Advocate
    Google Cloud Platform
    @glaforge
    How do we Scale
    in the Cloud?
    Google-style!

    View Slide

  17. Proprietary + Confidential
    The various compute options
    on Google Cloud Platform
    @glaforge

    View Slide

  18. Proprietary + Confidential
    Google App Engine — GAE
    Flex and Standard
    “Deploy your code,
    we’ll scale it
    for you!”
    @glaforge

    View Slide

  19. Proprietary + Confidential
    Google Container Engine — GKE
    Powered by Kubernetes & Docker
    OSS Kubernetes
    based container
    clustering
    @glaforge

    View Slide

  20. Proprietary + Confidential
    Google Compute Engine — GCE
    Customize your VM images
    Full control:
    Reusable and
    customisable VMs
    @glaforge

    View Slide

  21. Proprietary + Confidential
    Scale a Swagger-based Web API
    with Google Cloud Endpoints
    Guillaume Laforge
    Staff Developer Advocate
    Google Cloud Platform
    @glaforge
    So what’s
    Cloud Endpoints

    View Slide

  22. Proprietary + Confidential
    Cloud Endpoints
    API Management on Google Cloud Platform
    @glaforge

    View Slide

  23. Proprietary + Confidential
    What is API Management?
    @glaforge

    View Slide

  24. Proprietary + Confidential
    ● API Management from Google
    ● This architecture serves hundreds
    of billions of requests per day
    ● All configuration happens through
    Open API Spec (JSON/HTTP & gRPC)
    Cloud Endpoints
    @glaforge

    View Slide

  25. Proprietary + Confidential
    Three key aspects
    For public / private / mobile / µ-services use cases
    @glaforge

    View Slide

  26. Proprietary + Confidential
    Three key aspects
    For public / private / mobile / µ-services use cases
    Control access,
    authenticate users
    SECURE
    @glaforge

    View Slide

  27. Proprietary + Confidential
    Three key aspects
    For public / private / mobile / µ-services use cases
    Logging and monitoring
    of key metrics
    SECURE MONITOR
    @glaforge

    View Slide

  28. Proprietary + Confidential
    Three key aspects
    For public / private / mobile / µ-services use cases
    Speed and scalability
    SECURE MONITOR SCALE
    @glaforge

    View Slide

  29. Proprietary + Confidential
    @glaforge

    View Slide

  30. Proprietary + Confidential
    Extensible Service Proxy
    Why a server-local proxy?
    Extremely thin
    Eliminates network hop
    Simpler, better security
    Scales with your app
    <1 ms latency
    @glaforge

    View Slide

  31. Proprietary + Confidential
    Extensible Service Proxy
    Why a server-local proxy?
    Extremely thin
    Eliminates network hop
    Simpler, better security
    Scales with your app
    <1 ms latency
    Will be
    Open
    Sourced
    @glaforge

    View Slide

  32. Pancake
    DEMO

    View Slide

  33. Proprietary + Confidential
    Proprietary + Confidential
    What else?
    @glaforge

    View Slide

  34. Proprietary + Confidential
    JSON-HTTP/1.1
    Use Open API specs
    to manage RESTful
    APIs written in any
    language and with
    any framework.
    Proto-HTTP/2
    Use gRPC to build
    highly efficient
    HTTP/2-based APIs
    Choose your protocol
    @glaforge

    View Slide

  35. Proprietary + Confidential
    Write once; serve twice
    ● At Google, our gRPC APIs serve both gRPC and
    REST/JSON surfaces
    ● Proxy allows you to write a gRPC backend and
    serve both REST/JSON and gRPC
    ● The only API management product that allows
    managing gRPC-based APIs
    @glaforge

    View Slide

  36. Proprietary + Confidential
    Summary
    Guillaume Laforge
    Staff Developer Advocate
    Google Cloud Platform
    @glaforge

    View Slide

  37. Summary
    Manage
    Open
    Choice
    JSON Web Tokens,
    Auth0, Firebase
    API Keys, Custom...
    Secure
    Monitor
    Scale

    View Slide

  38. Summary
    Manage
    Open
    Choice
    Secure
    Monitor
    Scale
    Dashboard with
    API Metrics
    and API Logs

    View Slide

  39. Summary
    Manage
    Open
    Choice
    Secure
    Monitor
    Scale

    View Slide

  40. Summary
    Manage
    Open
    Choice
    Protocol
    Tech
    Scale
    JSON / HTTP
    Or gRPC

    View Slide

  41. Summary
    Manage
    Open
    Choice
    Protocol
    Tech
    Scale
    Any Language
    Any Framework

    View Slide

  42. Summary
    Manage
    Open
    Choice
    Protocol
    Tech
    Scale
    3rd party cloud,
    or on-premise

    View Slide

  43. Summary
    Manage
    Open
    Choice
    Standard
    OSS

    View Slide

  44. Summary
    Manage
    Open
    Choice
    Standard
    OSS

    View Slide

  45. Current state & supported platforms
    ● BETA: Cloud Endpoints for JSON / HTTP REST APIs
    ○ App Engine Flex, Container Engine, Compute Engine
    ○ Other clouds + on premise via Kubernetes
    ● ALPHA: Cloud Endpoints for gRPC
    ○ Same (except GAE Flex w/ HTTP/1.1 support only)
    @glaforge

    View Slide

  46. Proprietary + Confidential
    Thanks for
    your attention!
    Guillaume Laforge
    Staff Developer Advocate
    Google Cloud Platform
    @glaforge
    Slides available here:
    bit.ly/endpoints-nordic
    Cloud Endpoints
    https://cloud.google.com/endpoints/

    View Slide

  47. References
    Slides of this presentation
    http://bit.ly/nordic-endpoints
    Google Cloud Endpoints
    https://cloud.google.com/endpoints/
    Managing gRPC APIs with Google Cloud Endpoints
    http://www.slideshare.net/WenchengLu/managing-grpc-apis-with-google-cloud-endpoints
    Choosing a compute option on Google Cloud Platform
    https://cloud.google.com/docs/choosing-a-compute-option
    @glaforge

    View Slide

  48. Picture credits — public domain images
    Truth newspaper
    https://pixabay.com/fr/v%C3%A9rit%C3%A9-journal-actualit%C3%A9s-imprim%C3%A9-166853/
    Women working together
    https://pixabay.com/fr/femmes-travail-d-%C3%A9quipe-l-%C3%A9quipe-1209678/
    Drill
    https://pixabay.com/fr/t%C3%AAte-de-forage-foret-perceuse-m%C3%A9tal-444504/
    Pancakes
    https://pixabay.com/fr/cr%C3%AApe-cr%C3%AApes-manger-alimentaire-640865/
    Room service icon
    https://pixabay.com/fr/service-de-chambre-serviteur-service-297071/
    @glaforge

    View Slide

  49. Proprietary + Confidential
    Appendix

    View Slide

  50. Proprietary + Confidential
    ---
    swagger: "2.0"
    info:
    description: "No description"
    version: "1.0.0"
    title: "pancakes-api"
    contact: {}
    host: "pancakes-endpoint-demo.appspot.com"
    paths:
    /pancakes:
    get:
    summary: "Retrieve the pancakes"
    operationId: "getAllPancakes"
    produces:
    - "application/json"
    parameters: []
    responses:
    200:
    description: "Status 200"
    schema:
    type: "array"
    items:
    $ref: "#/definitions/Pancake"
    security:
    - api_key: []
    swagger2.yaml
    post:
    summary: "Add a new pancake"
    operationId: "createPancake"
    consumes:
    - "application/json"
    produces:
    - "application/json"
    parameters:
    - in: "body"
    name: "body"
    required: false
    schema:
    $ref: "#/definitions/Pancake"
    responses:
    201:
    description: "Status 201"
    schema:
    $ref: "#/definitions/Pancake"
    security:
    - api_key: []

    View Slide

  51. Proprietary + Confidential
    /pancakes/{pancakeId}:
    get:
    summary: "Retrieve a particular pancake"
    operationId: "getPancakeById"
    produces:
    - "application/json"
    parameters:
    - name: "pancakeId"
    in: "path"
    description: "The unique pancake ID"
    required: true
    type: "string"
    responses:
    200:
    description: "Status 200"
    schema:
    $ref: "#/definitions/Pancake"
    security:
    - api_key: []
    swagger2.yaml
    securityDefinitions:
    api_key:
    type: "apiKey"
    name: "key"
    in: "query"
    definitions:
    Pancake:
    type: "object"
    required:
    - "title"
    properties:
    id:
    type: "string"
    description: "The unique pancake ID"
    title:
    type: "string"
    description: "Pancake title"

    View Slide

  52. Proprietary + Confidential
    FROM gcr.io/google_appengine/openjdk8
    VOLUME /tmp
    ADD build/distributions/pancakes.tar /
    ENV JAVA_OPTS='-Djava.security.egd=file:/dev/./urandom'
    ENTRYPOINT ["/pancakes/bin/start"]
    EXPOSE 8081
    Dockerfile

    View Slide

  53. Proprietary + Confidential
    kube-cfg.yaml
    apiVersion: v1
    kind: Service
    metadata:
    name: esp-pancakes
    spec:
    ports:
    - port: 80
    targetPort: 8080
    protocol: TCP
    name: http
    selector:
    app: esp-pancakes
    type: LoadBalancer
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: esp-pancakes
    spec:
    replicas: 1
    template:
    metadata:
    labels:
    app: esp-pancakes
    spec:
    containers:
    - name: esp
    image: b.gcr.io/endpoints/endpoints-runtime:0.3
    args: [
    "-p", "8080",
    "-a", "127.0.0.1:8081",
    "-s", "pancakes-endpoint-demo.appspot.com",
    "-v", "2016-10-24r0",
    ]
    ports:
    - containerPort: 8080
    - name: pancakes-image
    image: gcr.io/pancakes-endpoint-demo/pancakes-image:latest
    ports:
    - containerPort: 8081

    View Slide

  54. Proprietary + Confidential
    SERVICE: “esp-pancakes”
    CONTAINER: “esp” APP-CONTAINER:
    “pancakes-image”
    APP
    80 8080 8081 8081

    View Slide