Tworzenie komentarzy i węzłów za pomocą usług 3.x i JSON

10

Mam problem z uzyskaniem przez usługi rozpoznania testu POST w pliku /comment.json. Mam podobny problem z tworzeniem węzłów.

Występuje błąd: HTTP / 1.1 406 Not Acceptable: brak wymaganego komentarza argumentu

Ta wiadomość pochodzi z pliku: /services/server/rest_server/include/RESTServer.inc W szczególności wiersze:

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

w zasadzie wydaje się, że brakuje argumentu „komentarz” (i nie jest opcjonalny).

To jeden z wielu bitów JSON, które mu podałem (komentując węzeł 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"}]
]}}}

Jest całkowicie poprawny (na podstawie innych czeków JSON online). Pasuje również do tego, co widzę w przykładach testów usług na /services/test/functional/ServivesResourceCommentTests.test

zawsze jednak pojawia się ten sam komunikat o błędzie. Wygląda to podobnie do: Obiekt węzła json usługi Drupal 7

co również jest nierozwiązane. Czy ktoś może mi pomóc z właściwym formatowaniem JSON? Naprawdę wszystko, co chcę zrobić, to przekazać coś w stylu:

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

moje nagłówki http wydają się być prawidłowe, a użytkownik / login działał poprawnie.

elaydin
źródło

Odpowiedzi:

5

Następujący JSON wydaje się być minimum niezbędnym do opublikowania komentarza:

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

Ponieważ nie ma użytkownika, komentowanie tego „example.com/node/1” musi być włączone i należy zezwolić anonimowym użytkownikom na publikowanie komentarzy.

bendiy
źródło
2

Okazuje się, że próbowałem utworzyć węzły / komentarze bez uwierzytelnienia, a strona nie pozwoliła anonimowym użytkownikom na tworzenie węzłów / komentarzy. Gdy włączyłem uwierzytelnianie sesji, zalogowałem się poprawnie, wszystko działało dobrze.

elaydin
źródło
1
Więc włączyłeś uwierzytelnianie sesji w usługach Drupal lub w kliencie REST? Czy możesz podać kilka szybkich wskazówek, jak to zrobiłeś?
ted.strauss
2

Czy możesz mi powiedzieć, pod jaki adres URL chcesz opublikować ten ciąg json. Szukałem w Internecie jakiejś dokumentacji, jak utworzyć komentarz do węzła za pomocą usług 3. W dokumentacji tego modułu zupełnie brakuje. Próbowałem pisać do:

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

example.com/api/comment.json

example.com/api/comment/create.json

Wydaje się, że nic nie działa. Zawsze pojawia się komunikat „404 Not Found: Nie można znaleźć kontrolera”

EDYCJA: jak tylko to opublikowałem, zacząłem działać. Jeśli to pomoże komukolwiek, kto opublikuje swój ciąg json do:

example.com/api/comment.json

Jeśli używasz Poster do testowania, ustaw typ zawartości na application / json. Podczas korzystania z jquery upewnij się, że ustawiłeś dataType: „json”.

Gregg
źródło
2

Oto kilka przykładów tworzenia i aktualizowania węzłów i komentarzy w następującym formacie:

  • Metoda HTTP
  • Typ zawartości
  • Ścieżka URL
  • Dane do wysłania

Węzeł Utwórz

  • POCZTA
  • ContentType: application / json
  • ? q = punkt końcowy / node.json

    {„type”: „article”, „title”: „t8yZUfX2it”, „language”: „und”}

Aktualizacja węzła

  • POŁOŻYĆ
  • ContentType: application / json
  • ? q = punkt końcowy / węzeł / 123.json

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

Komentarz Utwórz

  • POCZTA
  • ContentType: application / json
  • ? q = punkt końcowy / komentarz.json

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

Aktualizacja komentarza

  • POŁOŻYĆ
  • ContentType: application / x-www-form-urlencoded
  • ? q = punkt końcowy / komentarz / 456.json

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

tyler.frankenstein
źródło
1
To działa dobrze. Powinna być zaakceptowana odpowiedź! należy pamiętać, aby dodać klucz: wartość „Content-Type”: „application / json” do nagłówka, jeśli testujesz z listonosza Chrome. Jest to kolejny nieoceniony zasób: https://www.drupal.org/node/1447020
longboardnode
1

Podobne problemy występowały nawet podczas testowania plakatu z wtyczką Firefox. Okazuje się, że robiły to po prostu dodatkowe białe znaki i inne proste formatowanie (takie jak znaki specjalne). Oto lista tego, co działa w moich własnych testach na to, czego potrzebowałem:

CREATE USER WORKS = punkt końcowy / użytkownik

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

LOGIN WORKS = punkt końcowy / użytkownik / login

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

CREATE FILE WORKS = punkt końcowy / plik

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

CREATE NODE WORKS = punkt końcowy / węzeł

{"title":"testrest1","type":"dl","field_dl_file":{"und":[{"fid":582}]},"uid":"1","language":"und"}
7 odpowiedzi
źródło