Le Guide API ReST | Marmicode
  • Le Guide API ReST par Marmicode
  • API ReST
    • L'Ecosystème Moderne
    • Le Besoin
    • Re.S.T. : REpresentational State Transfer
    • Les 5 règles et ½ de l’API ReST
    • Le Modèle de Maturité de Richardson
    • H.A.T.E.O.A.S. & Resource Linking
    • Avis Subjectif sur H.A.T.E.O.A.S. et le Semantic Web
    • ReST over HTTP
    • HTTP & CRUD
    • ReSTful donc Stateless
    • Pragmatisme, Idéologie et ReSTafarians
  • Conventions & Bonnes Pratiques
    • Nommage
    • Base URL
    • Media Type
    • Versioning
    • Propriété “id”
    • Polymorphisme
    • Datetime
    • Ressource d'Association
    • Pourquoi Appliquer ces Bonnes Pratiques
    • Zalando ReSTful API Guidelines
  • Les Outils
    • Swagger
    • OpenAPI Visual Editors
    • IDE Plugins
    • Postman
    • Insomnia
    • Fake & Sandbox
    • JSON Generator
    • Pact
  • Sécurité des APIs ReST
    • OWASP Top 10
    • Authentification et Session Management
    • Autorisation et Gestion des Permissions
    • Validation, Canonicalization, Escaping & Sanitization
    • Cookies are EVIL
    • C.O.R.S.
    • C.S.R.F.
    • C.S.R.F. & Media Type
    • C.S.R.F. Mitigation
    • C.S.R.F. & "Resource Linking"
    • J.O.S.E.
      • J.W.K.
      • J.W.S.
      • J.W.E.
    • J.W.T.
      • Description et Fonctionnement de JWT
      • Usages et Avantages
      • Utilisation de JWT pour l’Authentification
      • JWT, Authentification, Sessions et Risques Sécurité
      • Recommandations JWT
    • OAuth 2
      • OAuth 2 Roles
      • OAuth 2 Abstract Flow
      • OAuth 2 Authorization Code Flow
      • OAuth 2 Implicit Flow
      • OAuth 2 Resource Owner Password Credentials Flow
      • OAuth 2 Client Credentials
      • OAuth 2 Registration
      • OAuth 2 Risques & Recommandations
      • OAuth 2 Substitution Attack
    • OpenID Connect
      • Terminologie
      • Quoi de Neuf ?
      • OpenID Connect Flows
      • Que Faire ?
  • Autres Spécifications
    • JSON API
    • H.A.L.
    • JSON LD
    • Les Autres Initiatives
    • So What?
  • Quelques Liens & Ressources
  • Stay Tuned
    • 📝Blog
    • 🐦Twitter
    • 📬Newsletter
Propulsé par GitBook
Sur cette page
  1. API ReST

Avis Subjectif sur H.A.T.E.O.A.S. et le Semantic Web

PrécédentH.A.T.E.O.A.S. & Resource LinkingSuivantReST over HTTP

Dernière mise à jour il y a 4 ans

Supposons que nous disposions des objets et méthodes suivantes :

/* GET https://v1.api.wishtack.com/users/SOME_USER_ID */
userStore.getUser({userId: 'SOME_USER_ID'});

/* GET https://v1.api.wishtack.com/users/SOME_USER_ID/wishes */
wishStore.getWishList({userId: 'SOME_USER_ID'});

Supposons maintenant que l’API réponde avec les données suivantes :

{
  "href": "https://v1.api.wishtack.com/users/SOME_USER_ID",
  "wishes": {
    "href": "https://v1.api.wishtack.com/users/SOME_USER_ID/wishes"
  }
}

Comment faire pour réutiliser la méthode WishStore.getWishList ?

Faut-il ajouter une méthode WishStore.getWishListByUrl ?

Que faire en cas d’incohérence ?

  • Les données ne sont pas proprement canonicalisées.

  • Les URLs sont dupliquées et occupent une grande partie du contenu. Comment factoriser ?

  • Comment récupérer l'"id" si on ne souhaite pas utiliser le "href" comme "id".

  • Une URL est une information qui perd en canonicalisation. Une façon plus canonique de décrire une ressource serait la suivante :

    {
      "baseUrlList": ["https://api.wishtack.com", "https://api-backup.wishtack.com"],
      "resourcePath": [
        {"id": "USER_ID", "type": "user"},
        {"id": "WISH_ID", "type": "wish"}
      ]
    }
  • Comment basculer automatiquement d’une API principale à une API de backup sans “parser” et reconstruire l’URL ?

  • Peut-on faire confiance à une API au point d’utiliser naïvement les URLs qu’elle nous transmet ?

  • Il nous faudrait idéalement les informations suivantes :

    • id de la ressource.

    • type de la ressource ou encore mieux un référentiel de type. ?

    • Mapping type => informations sur la construction de l’URL (Base URL et Path).

    • Affordances : que puis-je faire avec la ressource ? A quoi correspond-elle ?

C’est tout simplement l’utopie du Web Sémantique, parfaitement adaptée à des ressources génériques mais à peu d'applications. Cela nécessite des standards de canonicalisation des données et une adoption importante.

Application-Level Profile Semantics :

I.A.N.A.
http://alps.io/spec/drafts/draft-01.html
Alps
Alps