GraphQL, gRPC or REST? Resolving the API Developer's Dilemma

GraphQL, gRPC or REST? Resolving the API Developer's Dilemma

GraphQL, gRPC, REST and WebHooks are among a bewildering array of technologies and architectural styles that are available to API developers today. Presented with such myriad options, how can we be confident of making an appropriate decision for the problem at hand? In search of guidance, developers often turn to online communities. This can exacerbate the problem as discussions about API styles often descend into statements about the superiority of one approach over another being presented as universal truths. Such comments invariably earn emotive rebuttals that also lack sufficient nuance. The result of such exchanges is increased confusion and uncertainty. Join me on a tour of these API styles where we will cut through this noise, demonstrate where each style shines (plus where they don't!) and ultimately resolve this dilemma of choice.

In this session we'll take an in-depth look at API design; the best practices that have evolved; the game changing supporting technologies that are now available including HTTP/2; and most importantly what you need to do to deliver a world class developer experience:

- How to determine the suitability of an API style for your application context. Don't be a victim of technology hype!
- What is required to support graceful evolution of the API contract including the potential implications of both Hyrum's Law and the Law of Implicit Interfaces
- Understand the supporting toolchains and technologies that dovetail with each API style.
- The importance of treating your API as a product with an unwavering focus on improving the ease of consumption for your clients.

By the end of the session, you will not only understand the concepts underpinning these various API styles but also have the knowledge to put them into practice. If you want to take to your API design expertise to the next level,

3353b76e1480888ea7a482ebaa883dcb?s=128

Rob Crowley

August 03, 2019
Tweet

Transcript

  1. 2.

    ▪ A TOUR OF API STYLES OVER TIME ▪ CONSTRAINTS

    AND INDUCED PROPERTIES ▪ MYTH BUSTING ▪ SAMPLE SCENARIOS
  2. 3.
  3. 4.
  4. 5.
  5. 6.
  6. 7.
  7. 8.
  8. 9.

  9. 10.
  10. 11.
  11. 12.
  12. 13.
  13. 14.
  14. 15.

  15. 16.
  16. 17.
  17. 18.
  18. 19.

  19. 20.
  20. 21.
  21. 22.
  22. 23.
  23. 24.
  24. 29.

  25. 30.
  26. 31.
  27. 32.

  28. 33.
  29. 34.
  30. 35.
  31. 36.
  32. 37.
  33. 38.
  34. 39.

  35. 40.

    If an API is mostly actions, maybe it should be

    RPC. If an API is mostly CRUD and is manipulating related data, maybe it should be REST
  36. 41.
  37. 42.

    ▪ API STYLES ADDRESS DIFFERENT PROBLEM SPACES ▪ RESTISH APIS

    WOULD MOST LIKELY BE BETTER AS GRAPHQL OR RPC ▪ gRPC IS PERFECT FOR SYCHRONOUS COMMUNICATIONS BETWEEN INTERNAL SERVICES
  38. 43.
  39. 44.
  40. 45.
  41. 46.
  42. 47.
  43. 48.
  44. 49.
  45. 50.
  46. 51.
  47. 52.

    ▪ THERE ARE MANY KINDS OF CACHES: CLIENT, SEVER AND

    NETWORK ▪ HIGHLY CUSTOMIZABLE APIS BENEFIT LESS FROM HTTP CACHING ▪ IF NETWORK CACHING IS VALUABLE THEN CONSIDER REST ▪ BEST PRACTICES ARE STILL EMERGING FOR GRAPHQL AND gRPC
  48. 53.
  49. 54.

  50. 55.
  51. 56.

    GRAPHQL ENABLES EACH CLIENT TO RETRIEVE EXACTLY THE DATA IT

    REQUIRES IN A SINGLE ROUND TRIP TO THE SERVER
  52. 57.
  53. 58.
  54. 59.
  55. 60.
  56. 61.
  57. 62.

    ▪ WITH HTTP/1.X THE COST OF A HANDSHAKE WAS HIGH

    ▪ HTTP/2 REMOVES THE NEED FOR COMPOUND DOCUMENTS ▪ SERVER PUSH CREATES NEW POSSIBILITIES BUT PROFILE USE CASES THOROUGHLY
  58. 63.
  59. 64.
  60. 65.
  61. 66.
  62. 67.

    ▪ DON’T ADD REQUIRED INPUTS ▪ DON’T REMOVE OUTPUTS OR

    MAKE THEM OPTIONAL ▪ DON’T CHANGE THE TYPE OF A FIELD ▪ FOLLOW THE ROBUSTNESS PRINCIPLE / POSTEL’S LAW
  63. 68.
  64. 69.
  65. 70.
  66. 71.

    With a sufficient number of users of an API, it

    does not matter what you promise in the contract: all observable behaviours of your system will be depended on by somebody. ’
  67. 72.
  68. 74.
  69. 75.

    - Front end and back end teams agree on schema.

    - UI is developed using mocked data based on schema - API is built out with any changes being communicated to front end team - Integrate front and back ends - Ship - Repeat
  70. 76.

    ▪ IS A TECHNIQUE TO MANAGE BREAKING CHANGES ▪ SHOULD

    BE A LAST RESORT, PREFER GRACEFUL EVOLUTION ▪ IS NOT A SUBSTITUTE FOR COMMUNICATING WITH USERS ▪ DOES NOT PROTECT AGAINST CONSUMERS DEPENDING ON IMPLICIT INTERFACE BEHAVIOUR
  71. 77.
  72. 78.
  73. 79.
  74. 80.
  75. 81.

    ▪ API DESIGN SKILLS ARE TABLE STAKES IRRESPECTIVE OF STYLE

    ▪ DESIGING A REST API FOLLOWS OUTSIDE-IN FLOW ▪ GRAPHQL DELAYS THIS MOMENT TO PROFILING QUERIES
  76. 82.
  77. 85.
  78. 86.

    SINGLE CLIENT. API IS STATIC AND WELL UNDERSTOOD. USE CASE

    WELL SUITED TO GRPC (I’M STILL EXPERIMENTING THOUGH!)
  79. 87.
  80. 89.
  81. 90.
  82. 91.
  83. 92.
  84. 93.