Conventions requises pour que l'API JSON RESTful soit utilisable avec Ember
Dans la Braise Modèles D'Introductionil est mentionné:
Sans aucune configuration, la Braise de Données peut charger et enregistrer des enregistrements et
leurs relations servi par une RESTful API JSON, à condition qu'il suit
certaines conventions.
Je suis arriver a commencé à essayer d'utiliser une base de jetons, RESTful API JSON, qui à première vue n'est pas strictement Reposant. Quelques exemples:
- Authentification est mise en œuvre comme
GET
/api/[email protected]&password=pass
- Plus de l'API de l'État de retour de 200 (en-tête de réponse), même en cas d'échec. Le retour json contient des champs supplémentaires
success
(boolean) etcode
(int) qui indiquent si l'API a échoué ou réussi. - Les url ne sont pas basées sur des noms (des modèles). Par exemple, un type de message opération d'édition qui doit traditionnellement être un POST à l'url
/api/message/1/edit
est mis en œuvre que d'OBTENIR des/api/edit_message?id=1&text=new
Donc, je me demandais si quelqu'un pouvait liste de ce que ces certain conventions
sont mentionnés dans la documentation. Cela pourrait m'aider à comprendre si je pouvais utiliser ember-data ou pas.
source d'informationauteur Code Poet
Vous devez vous connecter pour publier un commentaire.
La réponse courte est que EmberData est probablement pas un bon ajustement pour votre API REST comme votre API REST n'est pas vraiment une API rest (il ne doit pas utiliser les verbes HTTP, et au lieu intègre les actions dans le cadre de la chaîne de requête).
Pourquoi Braise de Données N'est Probablement pas pour Vous
Alors qu'il peut avoir été un objectif de la Braise de Données de projet dans le passé, à l'appui d'une API comme celui que vous décrivez, plus récemment, la Braise de Données, les développeurs ont déclaré explicitement qu'ils n'ont pas l'intention de Braise de Données pour être utilisés avec des non-conventionnelle Api. Par exemple, le BasicAdapter qui vise à "combler l'écart" et de permettre l'utilisation de Braise de données avec les non-conventionnelle des Api REST a été supprimé.
Voici la véritable citation et un lien vers le blog à Emberjs.com (à lire):
Comme il est recommandé dans ce billet de blog, vous devriez vérifier les données suivantes persistance des bibliothèques qui pourrait être mieux adapté à votre situation:
https://github.com/endlessinc/ember-restless
https://github.com/ebryn/ember-model
Enfin, vous pouvez toujours le faire vous-même avec l'AJAX un peu comme le Discours de gens n'ont http://eviltrout.com/2013/03/23/ember-without-data.html
Authentification
Pour autant que je sais de Braise Données ne gère pas l'authentification d'application qui est ce que je pense que vous êtes avec votre exemple. Pour votre système d'authentification, vous pourrait ressembler à quelque chose comme de la Braise.SimpleAuth (https://github.com/simplabs/ember-simple-auth) qui est hautement configurable et devrait travailler avec le mécanisme d'authentification (bien qu'il faudra sans aucun doute l'écriture d'un personnalisé Authentificateur).
Écrit une coutume Authentificateur est assez simple.
Ce qui est de Braise de Données Attend en Fait à
Je vous recommande la lecture sur cette page si vous ne l'avez pas encore vu: http://emberjs.com/guides/models/the-rest-adapter/
Braise de Données va utiliser les Verbes HTTP pour transmettre l'intention. Ainsi, lorsque vous effectuez un appel à createRecord sur l'un de vos modèles puis enregistrez le magasin, Ember Données émettra un HTTP POST à votre API REST. Lorsque vous essayez d'obtenir un record, Ember émet une requête GET. Lorsque vous essayez de supprimer un enregistrement de Braise émettra une demande de SUPPRESSION (etc. etc.).
Permet de dire que vous avez trois modèles qui ressemble à ceci:
Lorsque vous tentez de charger un enregistrement à l'aide
this.store.find('shoppingCart', 1)
Braise va faire une requête GET au pluriel du nom du modèle (dans ce casGET /shoppingCarts/1
). Braise a un tas de règles intégré à déterminer le pluriel d'un mot ainsi par exemple, il sait que le pluriel desearch
estsearches
et passearchs
. Une fois que la demande est faite votre API REST doit retourner le JSON suivants:Si vous faisiez
this.store.find('shoppingCart')
puis de Braise de Données sera question d'unGET /shoppingCarts
et s'attendre à un tableau de panier objets assortie avec la forme plurielle du nom du modèle. Par exemple, comme ceci:Notez que lorsque vous renvoyer des enregistrements du serveur, vous devez inclure un
id
champ qui identifie de manière unique le dossier étant renvoyé. Le champ id n'est pas spécifié dans le modèle lui-même. Lorsque vous créez un nouvel enregistrement et l'envoi de données au serveur de ne pas inclure le champ id (tel qu'il sera déterminé côté serveur), mais le RESTE de l'API devra alors renvoyer ce que l'id est dans la réponse.Dans l'exemple ci-dessus, si Braise Données de l'utilisateur "1" mis en cache dans le magasin, alors il suffit d'utiliser cette information, sinon il va faire une autre requête GET à
GET /users/1
pour récupérer des informations pour l'utilisateur 1. (Vous pouvez le rendre plus efficace par sideloading dossiers si vous voulez éviter de multiples requêtes GET).Pour résumer, la convention est d'utiliser des verbes pour exprimer ce que l'action devrait être prise, l'URL de Braise de Données à envoyer la demande est fondée sur le pluriel du nom du modèle que vous interrogez.
La mise en garde big
La plupart de ce que j'ai écrit ci-dessus est basée sur l'hypothèse que vous souhaitez utiliser Ember Data "out of the box" sans trop de personnalisation. De manière générale, je pense que la Braise de Données est plus facile de travailler lorsque vous avez le contrôle sur le RESTE de l'API et peut s'adapter pour se conformer à la Braise de Données de l'avis de la façon dont un JSON API REST devrait fonctionner. Il est possible de modifier le comportement par défaut de Braise de Données mais je ne suis pas très expérimenté avec le fait d'essayer de plier la Braise Données pour les adapter à mon API de sorte que vous pourriez avoir besoin d'une certaine entrée de quelqu'un d'autre qui a essayé de le faire.