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

Scale a Swagger-based web API with Google Cloud Endpoints

Scale a Swagger-based web API with Google Cloud Endpoints

Web APIs are more often specified with API definition languages like Swagger (now named OpenAPI 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/OpenAPI Spec, and scale it using Cloud Endpoints, on the Google Cloud Platform.

Guillaume Laforge

May 11, 2017
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 Developer Advocate Google Cloud Platform @glaforge Cloud Endpoints https://cloud.google.com/endpoints/
  2. Proprietary + Confidential Scale a Swagger-based Web API with Google

    Cloud Endpoints Guillaume Laforge 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 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 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 Be careful with code generation overwriting customisations
  6. 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!
  7. Proprietary + Confidential Google App Engine — GAE Flex and

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

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

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

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

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

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

    / mobile / µ-services use cases Speed and scalability SECURE MONITOR SCALE @glaforge
  16. 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
  17. 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
  18. 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
  19. Summary Manage Open Choice JSON Web Tokens, Auth0, Firebase API

    Keys, Custom... Secure Monitor Scale Dashboard with API Metrics and API Logs
  20. Summary Manage Open Choice Protocol Tech Scale JSON / HTTP

    Or gRPC Any Language Any Framework 3rd party cloud, or on-premise
  21. Current state & supported platforms • Cloud Endpoints for JSON

    / HTTP REST APIs ◦ App Engine Flex, Container Engine, Compute Engine ◦ Other clouds + on premise via Kubernetes • Cloud Endpoints for gRPC ◦ Same (except GAE Flex w/ HTTP/1.1 support only) @glaforge
  22. Proprietary + Confidential Thanks for your attention! Guillaume Laforge Developer

    Advocate Google Cloud Platform @glaforge 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-api.endpoints.pancakes-endpoints-v2.cloud.goog" 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-endpoints-v2-1.0.tar /

    ENV JAVA_OPTS='-Djava.security.egd=file:/dev/./urandom' ENTRYPOINT ["/pancakes-endpoints-v2-1.0/bin/pancakes-endpoints-v2"] EXPOSE 8081 Dockerfile
  28. Proprietary + Confidential kube-cfg.yaml apiVersion: v1 kind: Service metadata: name:

    pancakes-api spec: ports: - port: 80 targetPort: 8080 protocol: TCP name: http selector: app: esp-pancakes type: LoadBalancer --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: pancakes-api spec: replicas: 1 template: metadata: labels: app: pancakes-api spec: containers: - name: esp image: gcr.io/endpoints-release/endpoints-runtime:1 args: [ "-p", "8080", "-a", "127.0.0.1:8081", "-s", "pancakes-api.endpoints.pancakes-endpoints-v2.cloud.goog", "-v", "2017-05-10r3", ] ports: - containerPort: 8080 - name: pancakes-image image: gcr.io/pancakes-endpoints-v2/pancakes-image:latest ports: - containerPort: 8081