it-swarm.com.de

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

Ich habe Probleme, Dienste dazu zu bringen, ein POST to /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-Bits, die ich ihm gegeben habe (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: Json-Knotenobjekt von Drupal 7-Diensten

das ist auch ungelöst. Kann mir jemand bei der richtigen JSON-Formatierung helfen? Wirklich, alles was ich tun möchte, ist es so zu bestehen 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.

10
elaydin

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.

5
bendiy

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, posten Sie Ihren JSON-String an:

example.com/api/comment.json

Wenn Sie Poster zum Testen verwenden, stellen Sie sicher, dass der Inhaltstyp auf application/json festgelegt ist. Stellen Sie bei Verwendung von jquery sicher, dass Sie den Datentyp 'json' festlegen.

2
Gregg

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, funktionierte alles einwandfrei.

2
elaydin

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

  • PUT
  • 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

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

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

2

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"}
1
7wonders