Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Scale a Swagger based Web API (Guillaume Laforge)

1,536 views

Published on

This is a session given by Guillaume Laforge at Nordic APIs 2016 Platform Summit on October 26th, in Stockholm Sweden.

Description:

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.

Published in: Technology
  • Login to see the comments

Scale a Swagger based Web API (Guillaume Laforge)

  1. 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. 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. 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. 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. 5. Proprietary + Confidential @glaforge Ok, OpenAPI Specs!
  6. 6. Proprietary + Confidential @glaforge Ok, OpenAPI Specs! Cloud Endpoints mastermind!
  7. 7. Proprietary + Confidential Benefits of OpenAPI Specs Contract First is Trendy ! @glaforge
  8. 8. Contract as the Source of Truth
  9. 9. Facilitates Team Communication, Collaboration
  10. 10. Great for Tooling
  11. 11. Great for Tooling Client SDKs Server skeletons
  12. 12. Great for Tooling Client SDKs Server skeletons Test stubs Static & live mocks
  13. 13. Great for Tooling Client SDKs Server skeletons Test stubs Static & live mocks Static documentation
  14. 14. Great for Tooling Client SDKs Server skeletons Test stubs Static & live mocks Sandbox & live playground Static documentation API Portal w/ provisioning
  15. 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
  16. 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!
  17. 17. Proprietary + Confidential The various compute options on Google Cloud Platform @glaforge
  18. 18. Proprietary + Confidential Google App Engine — GAE Flex and Standard “Deploy your code, we’ll scale it for you!” @glaforge
  19. 19. Proprietary + Confidential Google Container Engine — GKE Powered by Kubernetes & Docker OSS Kubernetes based container clustering @glaforge
  20. 20. Proprietary + Confidential Google Compute Engine — GCE Customize your VM images Full control: Reusable and customisable VMs @glaforge
  21. 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
  22. 22. Proprietary + Confidential Cloud Endpoints API Management on Google Cloud Platform @glaforge
  23. 23. Proprietary + Confidential What is API Management? @glaforge
  24. 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
  25. 25. Proprietary + Confidential Three key aspects For public / private / mobile / µ-services use cases @glaforge
  26. 26. Proprietary + Confidential Three key aspects For public / private / mobile / µ-services use cases Control access, authenticate users SECURE @glaforge
  27. 27. Proprietary + Confidential Three key aspects For public / private / mobile / µ-services use cases Logging and monitoring of key metrics SECURE MONITOR @glaforge
  28. 28. Proprietary + Confidential Three key aspects For public / private / mobile / µ-services use cases Speed and scalability SECURE MONITOR SCALE @glaforge
  29. 29. Proprietary + Confidential @glaforge
  30. 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
  31. 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
  32. 32. Pancake DEMO
  33. 33. Proprietary + Confidential Proprietary + Confidential What else? @glaforge
  34. 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
  35. 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
  36. 36. Proprietary + Confidential Summary Guillaume Laforge Staff Developer Advocate Google Cloud Platform @glaforge
  37. 37. Summary Manage Open Choice JSON Web Tokens, Auth0, Firebase API Keys, Custom... Secure Monitor Scale
  38. 38. Summary Manage Open Choice Secure Monitor Scale Dashboard with API Metrics and API Logs
  39. 39. Summary Manage Open Choice Secure Monitor Scale
  40. 40. Summary Manage Open Choice Protocol Tech Scale JSON / HTTP Or gRPC
  41. 41. Summary Manage Open Choice Protocol Tech Scale Any Language Any Framework
  42. 42. Summary Manage Open Choice Protocol Tech Scale 3rd party cloud, or on-premise
  43. 43. Summary Manage Open Choice Standard OSS
  44. 44. Summary Manage Open Choice Standard OSS
  45. 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
  46. 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/
  47. 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
  48. 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
  49. 49. Proprietary + Confidential Appendix
  50. 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: []
  51. 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"
  52. 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
  53. 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
  54. 54. Proprietary + Confidential SERVICE: “esp-pancakes” CONTAINER: “esp” APP-CONTAINER: “pancakes-image” APP 80 8080 8081 8081

×