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

Scaling a Swagger-based Web API with Google Clo...

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/
  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?
  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!
  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
  5. Great for Tooling Client SDKs Server skeletons Test stubs Static

    & live mocks Sandbox & live playground Static documentation API Portal w/ provisioning
  6. 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
  7. 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!
  8. Proprietary + Confidential Google App Engine — GAE Flex and

    Standard “Deploy your code, we’ll scale it for you!” @glaforge
  9. Proprietary + Confidential Google Container Engine — GKE Powered by

    Kubernetes & Docker OSS Kubernetes based container clustering @glaforge
  10. Proprietary + Confidential Google Compute Engine — GCE Customize your

    VM images Full control: Reusable and customisable VMs @glaforge
  11. 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
  12. 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
  13. Proprietary + Confidential Three key aspects For public / private

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

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

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

    / mobile / µ-services use cases Speed and scalability SECURE MONITOR SCALE @glaforge
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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/
  23. 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
  24. 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
  25. 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: []
  26. 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"
  27. 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
  28. 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