Slide 1

Slide 1 text

Le versioning des APIs REST Dans la vraie vie, on fait comment? Alexandre TOURET DevFestLille

Slide 2

Slide 2 text

Alexandre TOURET Architecte logiciel @touret_alex blog.touret.info alexandre-touret Qui suis-je?

Slide 3

Slide 3 text

We design payments technology that powers the growth of millions of businesses around the world. Who are we?

Slide 4

Slide 4 text

Il était une fois une API…

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

L’ API

Slide 7

Slide 7 text

Le workshop https://github.com/alexandre-touret/rest-apis-versioning-workshop https://github.com/alexandre-touret/rest-apis-versioning-solution

Slide 8

Slide 8 text

La vue haut niveau Allo s oo eation sea Allo s I entifi ation aut o i ation A usto e of t e oo sto e An a inist ato of t e oo sto e

Slide 9

Slide 9 text

Sous le capot oses t e oo sto e APIs oses t e APIs to es oo sto e oses t e I APIs oses t e onfi u ation at e s an o i es ist i ute t a in A usto e of t e oo sto e An a inist ato of t e oo sto e

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Delivery CI/CD Organisation du code Sécurité Compatibilité ascendante Impacts

Slide 12

Slide 12 text

Avant tout ça … etou su la V1

Slide 13

Slide 13 text

L’ API V1

Slide 14

Slide 14 text

• Est- e que j’en ai esoin ? • Comment gérer le versioning ? • Combien de versions puis-je gérer en même temps ? • Quelle est la compatibilité de la plateforme? • Quelle est votre gestion de configuration et quels sont les impacts? • Quid de la sécurité? Quelques questions à se poser

Slide 15

Slide 15 text

Une version dépréciée Une version courante Combien de versions concurrentes?

Slide 16

Slide 16 text

Qu’est- e qu’on e sionne ? On versionne les changements bloquants sur le contrat de services (opérations ou données)

Slide 17

Slide 17 text

✓ adding an operation ✓ adding an optional parameter ✓ adding an optional request header ✓ adding a response field ✓ adding a response header ✓ adding enum values ✓ removing an entire operation ✓ removing or renaming a parameter ✓ removing or renaming a response field ✓ adding a new required parameter ✓ making a previously optional parameter required ✓ changing the type of a parameter or response field ✓ removing enum values ✓ adding a new validation rule to an existing parameter ✓ changing authentication or authorization requirements Les changements selon GitHub https://docs.github.com/en/rest/overview/api-versions?apiVersion=2022-11-28 Bloquants Non-bloquants

Slide 18

Slide 18 text

Une modification bloquante dans le contrat de services Par exemple : dans notre objet Book un auteur devient une liste ’ C’est-à-dire ? Q ’ - q ’ q ?

Slide 19

Slide 19 text

Des changements non bloquants? Les changements non bloquants peuvent être ajoutés sans versioning

Slide 20

Slide 20 text

Ajout ’o é ations et données

Slide 21

Slide 21 text

Comment spécifier la version ? URL Exemple /v1/api/books Header HTTP Exemple X-API-VERSION : v1 Content-Type Exemple Accept: application/vnd.myn ame.v1+json RFC 9110

Slide 22

Slide 22 text

oses t e oo sto e APIs oses t e APIs to es oo sto e oses t e I APIs oses t e onfi u ation at e s an o i es ist i ute t a in A usto e of t e oo sto e An a inist ato of t e oo sto e

Slide 23

Slide 23 text

é ifi ation e la e sion ans l’URL Le changement de version représente des changements bloquants é ifi ation e la e sion ans l’URL Ils sont toujou s à la V1… Spécification de la version dans le header "X-GitHub-Api-Version” Et les grands du web?

Slide 24

Slide 24 text

Positionner une version dans l’URI Si vous voulez repousser l’utilisation du versioning /v1/api/books

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

Un nouveau client et de nouvelles fonctionnalités (V2)

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

La fonctionnalité majeure de la V2 Gestion ’ liste ’ V2 V1

Slide 29

Slide 29 text

Contrat de services Bases de données Compatibilité avec la V1 Impacts

Slide 30

Slide 30 text

oses t e oo sto e APIs oses t e oo sto e APIs oses t e APIs to es oo sto e oses t e I APIs oses t e onfi u ation at e s an o i es ist i ute t a in A usto e of t e oo sto e An a inist ato of t e oo sto e V2 V1 V2 V1

Slide 31

Slide 31 text

oo t in aut o Quid de la base de données (relationnelle)? oo List Aut o aut o s Aut o t in fi stna e t in lastna e n V2 V1

Slide 32

Slide 32 text

oses t e oo sto e APIs oses t e oo sto e APIs oses t e APIs to es oo sto e to es oo sto e oses t e I APIs oses t e onfi u ation at e s an o i es ist i ute t a in A usto e of t e oo sto e An a inist ato of t e oo sto e Deux bases de données?

Slide 33

Slide 33 text

De l’o anisation u o e à la mise en production

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

Main Feature Hotfix Develop Release V1 V2 V2.1 Release avec la liste des auteurs Compatibilité ascendante V1.1

Slide 36

Slide 36 text

oses t e oo sto e APIs oses t e oo sto e APIs oses t e APIs to es oo sto e oses t e I APIs oses t e onfi u ation at e s an o i es ist i ute t a in A usto e of t e oo sto e An a inist ato of t e oo sto e Gestion de la configuration

Slide 37

Slide 37 text

http :8888/rest-book/v1 { "label": null, "name": "rest-book", "profiles": [ "v1" ], "propertySources": [ { "name": "classpath:/config/rest-book-v1.yml", "source": { "booknumbers.api.timeout_sec": 2, "booknumbers.api.url": "http://127.0.0.1:8081/v1/isbns", "logging.level.org.hibernate.stat": "info", […] } Un exemple avec Spring Cloud Config

Slide 38

Slide 38 text

• JAR, ZIP, Charts Helm, Images Docker Un livrable par branche/tag • De manière dynamique (serveur de configuration) • Statique (Config Maps) Configuration • Bases de données • Divers Scripts Les livrables impactés par une version

Slide 39

Slide 39 text

oses t e oo sto e APIs oses t e oo sto e APIs oses t e APIs • Un en i onne ent ’ exécution par version • Centralisez la gestion des versions par une API Gateway Les en i onne ents ’e é ution

Slide 40

Slide 40 text

oses t e oo sto e APIs oses t e APIs ansfo s ol equests es onses to ne ones • L’API ate ay e ose les eu versions (V1 et V2) • Elle transforme les requêtes et réponses de la V1 au format V2 Et si on ne gardait qu’un service?

Slide 41

Slide 41 text

├── info │ └── touret │ └── oo sto e │ └── s in │ ├── oo │ │ ├── ont olle 1 │ │ ├── ont olle 2 │ │ ├── dto │ │ ├── entity │ │ ├── e e tion │ │ ├── a e │ │ ├── e osito y │ │ └── se i e Gérer les versions dans la base de code: 1 version = 1 package Une autre manière de faire ├── info │ └── touret │ └── oo sto e 1 │ └── oo sto e 2

Slide 42

Slide 42 text

• Identifiez qui utilise chaque version de votre API • Mettez en place des tableaux de bord (ex. Kibana) • Utilisez une API-KEY qui e ett a ’i entifie aque lient Observabilité → Mieux anticiper le décommissionnement des versions dépréciées

Slide 43

Slide 43 text

• P ésente ot e st até ie à os a tenai es … et en inte ne • Publiez votre roadmap et changelogs régulièrement • Indiquez dans les headers de vos réponses que votre API est dépréciée Communication Deprecation: version="v1" Link:https://developer.example.com/deprecation

Slide 44

Slide 44 text

La sécurité

Slide 45

Slide 45 text

Les modèles ’ a ilitation à l’é eu e du versioning Allo s oo eation sea Allo s I entifi ation aut o i ation A usto e of t e oo sto e An a inist ato of t e oo sto e

Slide 46

Slide 46 text

La V1 de la policy (avec un modèle RBAC) Bookstore admin Bookstore customer Utilisateurs Rôles Permissions Books/write Books/search Isbns/read Isbns/write Books/read Admin Recherche Consultation

Slide 47

Slide 47 text

oses t e oo sto e APIs oses t e oo sto e APIs oses t e APIs to es oo sto e oses t e I APIs oses t e onfi u ation at e s an o i es ist i ute t a in A usto e of t e oo sto e An a inist ato of t e oo sto e

Slide 48

Slide 48 text

Une nouvelle policy (V2) Bookstore Admin Bookstore customer Utilisateurs Rôles Permissions Books/search Isbns/read Books/write Isbns/write Books/read Authors/write Gestion auteurs admin recherche

Slide 49

Slide 49 text

oses t e oo sto e APIs oses t e oo sto e APIs oses t e APIs to es oo sto e oses t e I APIs oses t e onfi u ation at e s an o i es ist i ute t a in A usto e of t e oo sto e An a inist ato of t e oo sto e

Slide 50

Slide 50 text

oses t e oo sto e APIs oses t e oo sto e APIs oses t e APIs to es oo sto e to es oo sto e oses t e I APIs oses t e onfi u ation at e s an o i es ist i ute t a in A usto e of t e oo sto e An a inist ato of t e oo sto e

Slide 51

Slide 51 text

Exemple avec des scopes

Slide 52

Slide 52 text

On peut avoir des changements bloquants dans les policies ! Selon les outils (ex. CASBIN, Keycloak …) ne as hésiter à les versionner! En ésu é… BookAdmin_V1

Slide 53

Slide 53 text

Conclusion

Slide 54

Slide 54 text

Pour vos prochaines APIs Evitez dans un premier temps Identifiez les breaking changes Travaillez sur la modularité des APIs Observez! Pensez le versioning de manière globale Communiquez!

Slide 55

Slide 55 text

Pour aller plus loin https://github.com/alexandre-touret/rest-apis-versioning-workshop https://github.com/alexandre-touret/rest-apis-versioning-solution https://blog.touret.info/en/2023/03/27/rest-api-versioning/ https://docs.github.com/en/rest/overview/api-versions

Slide 56

Slide 56 text

https://bit.ly/apiversioning2305 Merci! ’ é à !

Slide 57

Slide 57 text

Don’t e a st an e ! Follow & get in touch @touret_alex linkedin.com/in/atouret blog.worldline.tech @WorldlineTech Follow our tech team: Follow me: blog.touret.info

Slide 58

Slide 58 text

Explore our jobs in tech: careers.worldline.com Want to shape how the world pays and get paid?