4
Le design d’API REST, un débat sans fin ? Speaker : Guillaume Laforge (Restlet) Format : Conférence Date : 22 avril 2016 Restlet propose plusieurs produits : Studio, APISpark, Framework, DHC Roy Fielding a défini Representational State Transfer : Identification des resources : URIs Représentation : JSON, XML Self-descriptive message : http, GET, cacheability HAETOAS Les verbes permettent de travailler à la fois sur une ressource ou une liste de ressources. Pas de POST pour un item mais sur la liste. Nommage Pour les ressources, privilégiez l’usage des noms plutôt que des verbes (différents qu’en SOAP). Les verbes peuvent être utilisés pour les actions ou les calculs : /login, /convertTemperature Préférez l’usage du pluriel. Ex : /tickets/234 Permet de s’affranchir des formes singulières / pluriel : /person vs /people Je veux le 234 ième élément de la collection tickets Forme de nommage : UpperCamelCase, lowerCamelCase, snake_case, dashed-nake-case Question de goût. Choisir une norme et rester cohérent

Le design d’API REST, un débat sans finjavaetmoi.com/wp...France...REST_un_debat_sans_fin.pdfLe design d’API REST, un débat sans fin ? Speaker : Guillaume Laforge (Restlet) Format

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Le design d’API REST, un débat sans finjavaetmoi.com/wp...France...REST_un_debat_sans_fin.pdfLe design d’API REST, un débat sans fin ? Speaker : Guillaume Laforge (Restlet) Format

Ledesignd’APIREST,undébatsansfin?Speaker:GuillaumeLaforge(Restlet)Format:ConférenceDate:22avril2016Restletproposeplusieursproduits:Studio,APISpark,Framework,DHC

RoyFieldingadéfiniRepresentationalStateTransfer:

• Identificationdesresources:URIs• Représentation:JSON,XML• Self-descriptivemessage:http,GET,cacheability• HAETOAS

Lesverbespermettentdetravailleràlafoissuruneressourceouunelistederessources.PasdePOSTpourunitemmaissurlaliste.NommagePourlesressources,privilégiezl’usagedesnomsplutôtquedesverbes(différentsqu’enSOAP).Lesverbespeuventêtreutiliséspourlesactionsoulescalculs:/login,/convertTemperaturePréférezl’usagedupluriel.Ex:/tickets/234Permetdes’affranchirdesformessingulières/pluriel:/personvs/peopleJeveuxle234ièmeélémentdelacollectionticketsFormedenommage:UpperCamelCase,lowerCamelCase,snake_case,dashed-nake-caseQuestiondegoût.Choisirunenormeetrestercohérent

Page 2: Le design d’API REST, un débat sans finjavaetmoi.com/wp...France...REST_un_debat_sans_fin.pdfLe design d’API REST, un débat sans fin ? Speaker : Guillaume Laforge (Restlet) Format

GestiondesrelationsNotiondesous-ressources:/tickets/123/messages/4Lorsqu’uneressourceestindépendante,avoirsapropreurl.Ex:/usergroups/24/users/12=>/users/12Paramètresd’APIPasderèglesengénéral.CellesutiliséeschezRestlet:

• Path:Required,resourceidentifier• Query:optional,querycollections(ex:pagination)• Body:resourcespecificlogic• Header:global,platform-wide(ex:APIKeys)

HTTPStatusCode

• 4xx:leclientdel’APIafaituneerreur• 5xx:erreurcôtéserveur• Lorsdelapagination,onpourraitutiliser206partialcontent+Link:danslesheaders

pourlesURLprev/net• Lorsdelacréationd’unenouvelleressource,renvoyerun201createdavecleheader

Location• Lorsd’untraitementasynchrone,onpeutrenvoyer202Accepted(nopayload

returned)• AprèsunDELETE,retourner204Nocontent

Anti-pattern:Facebookrenvoietoujours200OKmêmeencasd’erreurAPINavigationDémoavecDHCetl’APIStarwarsCachingEtagavecleshashtagOuNot-Modified-SincePaginationEnparamètrederequêtesHTTP:Pagenumber:?page=23,Avecdescurseurs:?cursor=34ea3fd6(insertion-friendly)pournepasraterdesélémentsPaginationparattribut

Page 3: Le design d’API REST, un débat sans finjavaetmoi.com/wp...France...REST_un_debat_sans_fin.pdfLe design d’API REST, un débat sans fin ? Speaker : Guillaume Laforge (Restlet) Format

Raremaisélégant:AcceptrangeheadernotjustforbytesGET/usersAccept-Ranges:usersContent-Raneusers0-9/200CollectionsPréférerlesunwrappedcolllctionàlaplacedesdonnées(objetintermédiairedata),celapermetderajouterdesméta-donnéesErreursStandardisationencoursducontenudelaréponsed’erreur(cf.photoci-dessus).SiuneAPIretourneuncoded’erreur4xxxxnonsupportéparleclient,cedernierdoitletraitercommeuneerreurgénérique400.FilteringLesbesoinsmobilesetwebpeuventdifférer.Onpeutfiltrelesdonnéesqu’onsouhaiterécupérer.Aveclesqueryparameters:?fields=firstname,lastname,age?exclude=biography,resyle?style=compactAvecleheaderpreferPrefer:return=minimalUtilisationducaractèrepoint.pourrécupérerlesous-champs:?fields=adress.zipTri

• SQL-style:?sort=title+DESC• Sort+asc/descCOMBO

Recherche/Filter/sortAPIpermettantauclientderécupérercequ’ilssouhaitent:Facebook’sGraphQLNetflix’sFalcor

Page 4: Le design d’API REST, un débat sans finjavaetmoi.com/wp...France...REST_un_debat_sans_fin.pdfLe design d’API REST, un débat sans fin ? Speaker : Guillaume Laforge (Restlet) Format

Versionningd’API

• Leplusfréquentdansl’URL:v1• CustomHeader:X-API-Version:2• SurGitHub:MimeTypeaveclaversion

HyperMediaRichardsonadéfinitunmodèledematurité.Ledernierniveau,lelevel3concerneleHypermediaControls.Avantages:

• Clientsplusgénériques• Plusbesoindeversionnersystématiquementl’API,parexempleunchangement

d’URLd’uneressourceInconvénients:

• Réponsepluslourde(terminauxmobilesetmauvaiseconnexion)• Lesclientsdoiventconnaîtreàquoicorrespondantlequalificatifdulienretourné

Pleind’approches:HAL,JSON-LD…AvecHAL,onajouterunattribut_linksIdentifiantsUtiliserlesUUIDàlaplacedesidentifiantsséquentielsQuestions/Réponses

• VerbePATCH:miseàjourpartielle(ex:unseulchamps).RegarderJSON-PATCHpourfairedesdiffentrelespayloads