Création de commentaires et de nœuds avec Services 3.x et JSON


10

J'ai du mal à obtenir des services pour reconnaître un POST vers /comment.json. J'ai également un problème similaire avec la création de nœuds.

Voici l'erreur que j'obtiens: HTTP / 1.1 406 non acceptable: commentaire d'argument requis manquant

Ce message provient du fichier: /services/server/rest_server/includes/RESTServer.inc Plus précisément, les lignes:

  elseif (!isset($info['optional']) || !$info['optional']) {
    return services_error(t('Missing required argument !arg', array(
      '!arg' => $info['name'],
    )), 406);
  }

fondamentalement, il semble penser que l'argument "commentaire" est manquant (et ce n'est pas facultatif).

Ceci est l'un des nombreux morceaux de JSON que je lui ai donné (publication d'un commentaire sur le nœud 8801)

{name:"test",language:"und",cid:"0",pid:"0",uid:"17593",nid:"8801",
comment:{subject:"Subject of the comment, if not entered it will be auto-generated",
comment_body:
{und:[
[{value:"value of the field comment in the comment, remember that in D7 we can create fields for comments too", format: "full_html"}]
]}}}

Il est parfaitement valide (basé sur d'autres vérifications JSON en ligne). Il correspond également à ce que je vois dans les exemples de test de services sur /services/test/functional/ServivesResourceCommentTests.test

cependant, j'obtiens toujours le même message d'erreur. Cela semble similaire à: objet noeud json Drupal 7 services

qui est également non résolu. Quelqu'un peut-il m'aider avec le bon formatage JSON? Vraiment, tout ce que je veux faire, c'est passer quelque chose comme:

{ nid : 8081 , uid : 17593 ,comment:{comment_body:"test",subject:"test"}}

mes en-têtes http semblent ok et l'utilisateur / login a bien fonctionné.

Réponses:


5

Le JSON suivant semble être le minimum dont vous avez besoin pour publier un commentaire:

{
  "nid":"1",
  "subject":"Comment Subject Text",
  "comment_body":{
    "und":[{
      "value":"Comment body text"
    }]
  }
}

Puisqu'il n'y a aucun utilisateur, les commentaires sur cet "example.com/node/1" doivent être activés et les autorisations pour les utilisateurs anonymes de poster des commentaires doivent être définies.


2

Il s'avère que j'essayais de créer des nœuds / commentaires sans authentification, et le site n'a pas permis aux utilisateurs anonymes de créer des nœuds / commentaires. Une fois que j'ai activé l'authentification de session, connecté correctement, les choses ont bien fonctionné.


1
Vous avez donc activé l'authentification de session dans les services Drupal ou dans votre client REST? Pouvez-vous donner quelques conseils rapides sur la façon dont vous avez procédé?
ted.strauss

2

Pouvez-vous me dire à quelle URL vous publieriez cette chaîne json. J'ai cherché sur le Web de la documentation pour créer un commentaire sur un nœud en utilisant les services 3. La documentation de ce module fait complètement défaut. J'ai essayé de poster sur:

example.com/api/node/{nid}/comments.json

example.com/api/comment.json

example.com/api/comment/create.json

Rien ne semble fonctionner. J'obtiens toujours "404 Not Found: Impossible de trouver le contrôleur"

EDIT: dès que j'ai posté cela, je l'ai fait fonctionner. Si cela peut aider quelqu'un d'autre à qui vous publiez votre chaîne json:

example.com/api/comment.json

Si vous utilisez Poster pour tester, assurez-vous de définir le type de contenu sur application / json. Lorsque vous utilisez jquery, assurez-vous de définir dataType: 'json'.


2

Voici quelques exemples pour créer et mettre à jour des nœuds et des commentaires au format suivant:

  • Méthode HTTP
  • ContentType
  • Chemin URL
  • Données à envoyer

Création de nœud

  • PUBLIER
  • ContentType: application / json
  • ? q = endpoint / node.json

    {"type": "article", "titre": "t8yZUfX2it", "langue": "und"}

Mise à jour du nœud

  • METTRE
  • ContentType: application / json
  • ? q = endpoint / node / 123.json

    {"node": {"nid": "123", "title": "9AjrXJhWMI", "language": "und"}}

Créer un commentaire

  • PUBLIER
  • ContentType: application / json
  • ? q = endpoint / comment.json

    {"subject": "liJmJfpqMX", "comment_body": {"und": [{"value": "9DyaNZi3lA"}]}, "nid": "18"}

Mise à jour des commentaires

  • METTRE
  • ContentType: application / x-www-form-urlencoded
  • ? q = point final / commentaire / 456.json

    {cid: 456, "subject": "hzU27R6daE", "comment_body": {"und": [{"value": "BqZU5DwArD"}]}, "nid": "18"}


1
Cela fonctionne bien. Devrait être la réponse acceptée! une chose à retenir est d'ajouter la clé: "Content-Type" value: "application / json" à votre en-tête si vous testez à partir de Chrome postman. Ceci est une autre ressource inestimable: https://www.drupal.org/node/1447020
longboardnode

1

J'obtenais des problèmes similaires même lorsque je testais simplement avec l'affiche du plugin Firefox. Il s'avère que c'était tout simplement les espaces blancs supplémentaires et une autre mise en forme simple (comme les échappements) qui le faisaient. Voici une liste de ce qui fonctionne dans mes propres tests pour ce dont j'avais besoin:

CREATE USER WORKS = endpoint / user

{"name":"myusername","pass":"12345678","mail":"myemail@example.com","status":"1"}

LOGIN WORKS = endpoint / user / login

{"username":"admin","password":"admin"}

CREATE FILE WORKS = point de terminaison / fichier

{"uid":"1","filesize":"99999","filename":"whatever.bin","file":"BASE64_ENCODED_DATA"}

CREATE NODE WORKS = endpoint / node

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.