Erstellen von Kommentaren und Knoten mit Services 3.x und JSON

10

Ich habe Probleme, Dienste dazu zu bringen, einen POST an /comment.json zu erkennen. Ich habe ein ähnliches Problem beim Erstellen von Knoten.

Folgendes ist der Fehler, den ich erhalte: HTTP / 1.1 406 Nicht akzeptabel: Fehlender erforderlicher Argumentkommentar

Diese Nachricht stammt aus der Datei: /services/server/rest_server/includes/RESTServer.inc Insbesondere die Zeilen:

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

Grundsätzlich scheint das Argument "Kommentar" zu fehlen (und es ist nicht optional).

Dies ist eines von vielen JSON-Elementen, die ich ihm gegeben habe (einen Kommentar an Knoten 8801 senden).

{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"}]
]}}}

Es ist vollkommen gültig (basierend auf anderen Online-JSON-Prüfungen). Es stimmt auch mit dem überein, was ich in den Testbeispielen für Services unter /services/test/functional/ServivesResourceCommentTests.test sehe

Ich erhalte jedoch immer die gleiche Fehlermeldung. Dies scheint ähnlich zu sein: Drupal 7 Services JSON-Knotenobjekt

das ist auch ungelöst. Kann mir jemand bei der richtigen JSON-Formatierung helfen? Eigentlich möchte ich es nur so weitergeben wie:

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

Meine http-Header scheinen in Ordnung zu sein und Benutzer / Login hat gut funktioniert.

elaydin
quelle

Antworten:

5

Der folgende JSON scheint das Minimum zu sein, das Sie zum Posten eines Kommentars benötigen:

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

Da es keinen Benutzer gibt, muss das Kommentieren dieses "example.com/node/1" aktiviert und die Berechtigung für anonyme Benutzer zum Posten von Kommentaren festgelegt werden.

Bendiy
quelle
2

Es stellte sich heraus, dass ich versucht habe, Knoten / Kommentare ohne Authentifizierung zu erstellen, und die Site erlaubte anonymen Benutzern nicht, Knoten / Kommentare zu erstellen. Nachdem ich die Sitzungsauthentifizierung aktiviert und mich ordnungsgemäß angemeldet hatte, funktionierten die Dinge einwandfrei.

elaydin
quelle
1
Sie haben also die Sitzungsauthentifizierung in Drupal-Diensten oder in Ihrem REST-Client aktiviert? Können Sie ein paar schnelle Tipps geben, wie Sie das gemacht haben?
Ted.strauss
2

Kannst du mir sagen, unter welcher URL du diesen JSON-String posten würdest? Ich habe im gesamten Web nach einer Dokumentation gesucht, wie mit Kommentaren 3 ein Kommentar zu einem Knoten erstellt werden kann. Die Dokumentation zu diesem Modul fehlt vollständig. Ich habe versucht zu posten:

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

example.com/api/comment.json

example.com/api/comment/create.json

Nichts scheint zu funktionieren. Ich erhalte immer "404 nicht gefunden: Controller konnte nicht gefunden werden"

EDIT: Sobald ich dies gepostet habe, habe ich es zum Laufen gebracht. Wenn es jemand anderem hilft, postest du deine JSON-Zeichenfolge an:

example.com/api/comment.json

Wenn Sie Poster zum Testen verwenden, müssen Sie den Inhaltstyp auf application / json einstellen. Stellen Sie bei Verwendung von jquery sicher, dass Sie den Datentyp 'json' festlegen.

Gregg
quelle
2

Hier einige Beispiele zum Erstellen und Aktualisieren von Knoten und Kommentaren im folgenden Format:

  • HTTP-Methode
  • Inhaltstyp
  • URL-Pfad
  • Zu sendende Daten

Knoten erstellen

  • POST
  • ContentType: application / json
  • q = endpoint / node.json

    {"type": "article", "title": "t8yZUfX2it", "language": "und"}

Knotenaktualisierung

  • STELLEN
  • ContentType: application / json
  • q = Endpunkt / Knoten / 123.json

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

Kommentar erstellen

  • POST
  • ContentType: application / json
  • q = endpoint / comment.json

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

Kommentar aktualisieren

  • STELLEN
  • ContentType: application / x-www-form-urlencoded
  • q = Endpunkt / Kommentar / 456.json

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

tyler.frankenstein
quelle
1
Das funktioniert gut. Sollte die akzeptierte Antwort sein! Eine Sache, an die Sie sich erinnern sollten, ist das Hinzufügen des Schlüssels: "Content-Type" -Wert: "application / json" zu Ihrem Header, wenn Sie von Chrome Postman testen. Dies ist eine weitere unschätzbare Ressource: https://www.drupal.org/node/1447020
Longboardnode
1

Ich hatte ähnliche Probleme, selbst als ich nur mit dem Firefox-Plugin-Poster getestet habe. Es stellt sich heraus, dass es ganz einfach die zusätzlichen Leerzeichen und einige andere einfache Formatierungen (wie z. B. Escapezeichen) waren, die dies taten. Hier ist eine Liste, was in meinen eigenen Tests für das funktioniert, was ich brauchte:

CREATE USER WORKS = Endpunkt / Benutzer

{"name":"myusername","pass":"12345678","mail":"[email protected]","status":"1"}

LOGIN WORKS = Endpunkt / Benutzer / Login

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

CREATE FILE WORKS = Endpunkt / Datei

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

CREATE NODE WORKS = Endpunkt / Knoten

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
7 Wunder
quelle