Jak opublikować nowy węzeł?

16

Odsyłam wiele linków, w tym:

Próbowałem kilka sposobów POST nowego węzła do witryny Drupal, ale nie udało mi się. Utworzyłem próbkę CCK do przechowywania danych uczniów z imieniem, wiekiem, płcią, DOB i dodałem listę.

Zainstalowałem i skonfigurowałem moduł Usługi (D7) i utworzyłem punkt końcowy usługi w usługach.
Zgodnie z oczekiwaniami, GET to najprostszy sposób na uzyskanie szczegółowych informacji o węźle w JSON. http://localhost/drupal/services/nodepo prostu wymieniono wszystkie węzły.

Nadal nie wiem, jak korzystać z metody POST .

  1. Chciałbym szukać studentów, których imię zawiera John . Próbowałem localhost/drupal/services/node&node[name]=john. Użyłem wtyczki POST Man dla Chrome bez powodzenia. Próbowałem też innych sposobów.

  2. Próbowałem dodać nowego ucznia do witryny bez powodzenia.

Czy ktoś może mi pomóc, aby powyższe działało dobrze?

AKTUALIZACJA :

Próbowałem dodać nowe węzły typu artykułu . Działa dobrze. ale gdy próbuję dodać węzły typu Departament CCK Pokazuje „ s: 22:„ Sprawdzanie poprawności CSRF nie powiodło się ”; „ Oto zrzuty ekranu

Przejrzałem link https://drupal.org/node/2013781

Śledziłem session = session_name = session_id, ale nadal pojawia się błąd.
wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Ramaraju.d
źródło
Co się stanie, gdy spróbujesz POST węzła? Czy pojawia się komunikat o błędzie? Jeśli tak, co to jest?
Gaelan

Odpowiedzi:

22

Mam nadzieję, że to ci pomoże

Dla Drupal 7

Narzędzia użyte:

  • Dodatek Firefox Poster do przeprowadzania testów i debugowania. Może istnieć również inny dodatek. Ale w tym przykładzie używam dodatku Firefox.
  • Aby pomóc w edycji i sprawdzaniu poprawności danych JSON, których możesz użyć
    • Edytuj dane JSON za pomocą tego łącza
    • Sprawdź poprawność danych JSON za pomocą tego łącza

Żądania HTTP

  • Aby wysyłać żądania HTTP, musisz użyć dodatku POSTER do przeglądarki Firefox .

  • Dwie najczęściej stosowane metody odpowiedzi na żądanie między klientem a serwerem to:

    • OTRZYMAĆ
    • POCZTA
  • Po pobraniu dodatku. Otwórz Firefox -> Narzędzia -> Plakat

    wprowadź opis zdjęcia tutaj

  • Pamiętaj, aby włączyć uwierzytelnianie sesji . Po prawidłowym skonfigurowaniu usług , przed utworzeniem węzła należy się zalogować . Po zalogowaniu możesz utworzyć węzły.

  • Do logowania użyj metody POST z adresem URL typu: http://XXXXXXXX.com/demo/rulebook/rulebook_endpoint/user/login

    wprowadź opis zdjęcia tutaj

  • Jeśli jest to prawidłowy użytkownik , zwróci dane użytkownika z identyfikatorem sesji i nazwą . Jeśli nie jest poprawny, zwróci dostęp odmowy

    wprowadź opis zdjęcia tutaj

  • Używając nazwy i identyfikatora sesji w POST HEADER, możemy tworzyć nowe węzły

    wprowadź opis zdjęcia tutaj

  • Teraz po dodaniu HEADERA musisz wysłać żądanie HTTP POST i upewnić się, że użytkownik powinien mieć uprawnienia do utworzenia węzła.

    wprowadź opis zdjęcia tutaj

  • Jeśli węzeł zostanie utworzony, otrzymasz odpowiedź z łączem do węzła

    wprowadź opis zdjęcia tutaj

UWAGA: Jeśli chcesz uzyskać odpowiedź w JSON, zawsze powinieneś dołączyć .json na końcu adresu URL. np. http://XXXXXXXX.com/test/endpoint/user.json LUB http://XXXXXXXX.com/test/endpoint/node.json LUB http://XXXXXXXX.com/test/endpoint/user/user_id .json LUB http://XXXXXXXX.com/test/endpoint/node/node_id.json

inizio
źródło
Przepraszam, że odznaczyłem opcję zakodowanego formularza w module usług. i oto odpowiedź 401: Nieautoryzowane: autoryzacja CSRF nie powiodła się. co może być tego przyczyną? Wielkie dzięki
Ramaraju.d
cześć @inizio, czy mogę wiedzieć, na jakiej podstawie przypisałeś wartość sesji w HEADERS. Czy możesz to wyjaśnić? Przykładem sesji jest SESS29af1facda0a866a687d5055f2fade2c, ale w twojej odpowiedzi ma on większą długość!
Ramaraju.d
Wartość sesji w HEADERS składa się z session_name i session_id. tzn. sesja jest zmienną, a jej wartość składa się z nazwa_sesji = identyfikator_sesji. session = (session_name = session_value)
inizio
Mówi 401: Nieautoryzowane: Sprawdzanie poprawności CSRF nie powiodło się. Podałem następujące nazwy nagłówków = wartość sesji = SESS29af1facda0a866a687d5055f2fade2c = gBVoqtkN2ZNjDyOjIfpz47oQpnmCKytcgHOCHZhKRzo
Ramaraju.d
Tak, zadziałało. Ale jedyny problem, artykuł CCK ma tytuł, nazwa_pola, treść, ale zapisywany jest tylko tytuł i tworzony jest węzeł, ale pole treści i nazwy są puste. Jak temu zaradzić.
Ramaraju.d
7

Dla Drupal 7 i usług 7.x-3.x

Krok 1:user.login Wyślij prośbę o zasób, podając swoją nazwę użytkownika i hasło.

Jeśli logowanie się powiedzie, otrzymasz obiekt odpowiedzi z 4 właściwościami:

  • nazwa_sesji
  • sessid
  • znak
  • użytkownik (obiekt)

Zrzut ekranu z listonosza Google Chrome Zrzut ekranu z listonosza Google Chrome

Krok 2: Wyślij żądanie do node2 nagłówków

  • Cookie: [nazwa_sesji] = [sessid]
  • X-CSRF-Token: [token]

Zrzut ekranu z listonosza Google Chrome Zrzut ekranu z listonosza Google Chrome

Muhammad Reda
źródło
Próbowałem użytkownika <endpoint> /user.login, ale nie jest to repsonse : prntscr.com/gru4y6 - nie jestem pewien, co robię źle.
Patoshi パ ト シ
0

Jeśli wykonasz test POST do interfejsu API REST , będziesz musiał umieścić wszystko w danych POST , a nie w adresie URL . W programie Listonosz możesz ustawić żądanie publikowania, a następnie wpisywać do x-www-form-urlencodedi poniżej, aby dodawać wartości danych. Nie zapomnij dodać statusu, identyfikatora użytkownika, języka, typu, tytułu, a następnie dodatkowych wartości. Adres URL zasobu powinien być tylko HOST/REST_API_PATH/node.

itarato
źródło
1
Trochę mylące. Ok, możesz mi powiedzieć, jakie powinny być parametry tworzenia nowego artykułu.? Jeśli nie masz nic przeciwko, możesz opublikować przykład lub link, dzięki czemu będę mieć jasną koncepcję!
Ramaraju.d