Creazione di commenti e nodi con Servizi 3.xe JSON


10

Ho problemi a ottenere i servizi per riconoscere un POST su /comment.json. Ho un problema simile anche con la creazione di nodi.

Quello che segue è l'errore che ottengo: HTTP / 1.1 406 non accettabile: commento argomento mancante richiesto

Questo messaggio proviene dal file: /services/server/rest_server/includes/RESTServer.inc In particolare, le righe:

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

in sostanza, sembra pensare che l'argomento "comment" sia mancante (e non è facoltativo).

Questo è uno dei tanti bit di JSON che gli ho dato (postando un commento al nodo 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"}]
]}}}

È perfettamente valido (basato su altri controlli JSON online). Corrisponde anche a quello che vedo negli esempi di test dei servizi su /services/test/functional/ServivesResourceCommentTests.test

tuttavia, ricevo sempre lo stesso messaggio di errore. Questo sembra simile a: Drupal 7 servizi oggetto nodo json

che è anche irrisolto. Qualcuno può aiutarmi con la corretta formattazione JSON? Davvero, tutto quello che voglio fare è passare qualcosa del tipo:

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

le mie intestazioni http sembrano ok e user / login hanno funzionato bene.

Risposte:


5

Il seguente JSON sembra essere il minimo necessario per pubblicare un commento:

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

Poiché non è presente alcun utente, è necessario attivare i commenti a questo "esempio.com/node/1" e impostare le autorizzazioni per gli utenti anonimi per pubblicare commenti.


2

Risulta che stavo cercando di creare nodi / commenti senza autenticazione e il sito non ha consentito agli utenti anonimi di creare nodi / commenti. Dopo aver attivato l'autenticazione della sessione, effettuato l'accesso correttamente, le cose hanno funzionato bene.


1
Quindi hai attivato l'autenticazione della sessione nei servizi Drupal o nel tuo client REST? Puoi darci qualche rapido suggerimento su come hai fatto?
ted.strauss,

2

Puoi dirmi a quale URL pubblicheresti questa stringa JSON. Ho cercato in tutto il Web della documentazione su come creare un commento su un nodo usando i servizi 3. La documentazione su questo modulo è completamente carente. Ho provato a postare su:

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

example.com/api/comment.json

example.com/api/comment/create.json

Niente sembra funzionare. Ricevo sempre "404 Not Found: impossibile trovare il controller"

EDIT: non appena l'ho pubblicato l'ho fatto funzionare. Se sarà di aiuto a chiunque pubblichi la tua stringa JSON su:

example.com/api/comment.json

Se si utilizza Poster per eseguire il test, assicurarsi di impostare il tipo di contenuto su application / json. Quando usi jquery assicurati di impostare dataType: 'json'.


2

Ecco alcuni esempi per creare e aggiornare nodi e commenti nel seguente formato:

  • Metodo HTTP
  • Tipo di contenuto
  • Percorso URL
  • Dati da inviare

Crea nodo

  • INVIARE
  • ContentType: application / json
  • ? Q = endpoint / node.json

    { "Type": "articolo", "title": "t8yZUfX2it", "lingua": "und"}

Aggiornamento nodo

  • METTERE
  • ContentType: application / json
  • ? Q = endpoint / node / 123.json

    { "Nodo": { "nid": "123", "title": "9AjrXJhWMI", "lingua": "und"}}

Commento Crea

  • INVIARE
  • ContentType: application / json
  • ? Q = endpoint / comment.json

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

Aggiornamento dei commenti

  • METTERE
  • ContentType: application / x-www-form-urlencoded
  • ? Q = endpoint / commento / 456.json

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


1
Funziona bene Dovrebbe essere la risposta accettata! una cosa da ricordare è aggiungere la chiave: valore "Content-Type": "application / json" alla tua intestazione se stai testando dal postino di Chrome. Questa è un'altra preziosa risorsa: https://www.drupal.org/node/1447020
longboardnode

1

Stavo riscontrando problemi simili anche durante i test con il poster del plug-in di Firefox. Si scopre che erano semplicemente gli spazi bianchi extra e qualche altra formattazione semplice (come le escape) a farlo. Ecco un elenco di ciò che funziona nei miei test per ciò di cui avevo bisogno:

CREA OPERE UTENTE = endpoint / utente

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

LOGIN WORKS = endpoint / utente / login

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

CREATE FILE WORKS = endpoint / file

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

CREATE NODE WORKS = endpoint / nodo

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.