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

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. I.A.N.A. ?

    • 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 : http://alps.io/spec/drafts/draft-01.html​

Alps
Alps

​