¿Cómo publico un nuevo nodo?

16

Me he referido a muchos enlaces, incluidos los siguientes:

Intenté varias maneras de PUBLICAR un nuevo nodo en un sitio de Drupal, pero he fallado. Creé un CCK de muestra para almacenar datos de estudiantes con nombre, edad, sexo, fecha de nacimiento y agregué una lista.

Instalé y configuré el módulo de Servicios (D7) y creé un punto final de servicio en los servicios.
Como se esperaba, GET es la forma más fácil de obtener detalles de un nodo en JSON. http://localhost/drupal/services/nodesimplemente enumeró todos los nodos.

Todavía no puedo entender cómo usar el método POST .

  1. Me gustaría buscar a los estudiantes cuyo nombre contiene John . Probé localhost/drupal/services/node&node[name]=john. Utilicé el complemento POST Man para Chrome sin éxito. También probé algunas otras formas.

  2. Traté de agregar un nuevo estudiante al sitio sin éxito.

¿Alguien puede guiarme para que lo anterior funcione bien?

ACTUALIZACIÓN

Intenté agregar nuevos nodos de tipo artículo . Funcionó bien pero cuando intento agregar nodos del tipo Departamento CCK , muestra " s: 22:" Error de validación CSRF "; " Estas son las capturas de pantalla

He pasado por el enlace https://drupal.org/node/2013781

Seguí session = session_name = session_id pero todavía recibo un error.
ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Ramaraju.d
fuente
¿Qué sucede cuando intentas PUBLICAR un nodo? ¿Recibe un mensaje de error? Si es así, ¿qué es?
Gaelan

Respuestas:

22

Espero que esto te ayudará,

Para Drupal 7

Herramientas utilizadas:

  • Complemento de Firefox Poster para realizar pruebas y depuración. Puede haber otro complemento también. Pero para este ejemplo estoy usando el complemento de Firefox.
  • Para ayudar a editar y validar los datos JSON, puede usar
    • Edite los datos JSON usando este enlace
    • Valide los datos JSON usando este enlace

Solicitudes HTTP

  • Para realizar las solicitudes HTTP, debe usar el complemento POSTER de Firefox .

  • Dos métodos comúnmente utilizados para una solicitud-respuesta entre un cliente y un servidor son:

    • OBTENER
    • ENVIAR
  • Después de descargar el complemento. Abra Firefox -> Herramientas -> Cartel

    ingrese la descripción de la imagen aquí

  • Asegúrese de habilitar la autenticación de sesión . Una vez que los Servicios se hayan configurado correctamente, antes de crear el nodo, debe iniciar sesión . Una vez que haya iniciado sesión, puede crear los nodos.

  • Para iniciar sesión, utilice el método POST, con la URL como: http://XXXXXXXX.com/demo/rulebook/rulebook_endpoint/user/login

    ingrese la descripción de la imagen aquí

  • Si es un usuario válido , devolverá los detalles del usuario con el ID y el nombre de la sesión . Si no es válido, devolverá el acceso denegado

    ingrese la descripción de la imagen aquí

  • Al usar el nombre y la ID de la sesión en el POST HEADER, podemos crear nuevos nodos

    ingrese la descripción de la imagen aquí

  • Ahora, después de agregar HEADER, debe realizar una solicitud HTTP POST y asegurarse de que el usuario debe tener permisos para crear el nodo.

    ingrese la descripción de la imagen aquí

  • Si se crea el nodo, obtendrá la respuesta con el enlace de nodo

    ingrese la descripción de la imagen aquí

NOTA: Si desea la respuesta en JSON, siempre debe agregar .json al final de la URL. por ejemplo, http://XXXXXXXX.com/test/endpoint/user.json O http://XXXXXXXX.com/test/endpoint/node.json O http://XXXXXXXX.com/test/endpoint/user/user_id .json O http://XXXXXXXX.com/test/endpoint/node/node_id.json

inizio
fuente
Lo siento, desmarqué la opción de codificación de url de formulario en el módulo de servicios. y aquí está la respuesta 401: No autorizado: la autorización CSRF falló. ¿Que podria estar causando esto? Muchas gracias
Ramaraju.d 01 de
hola @inizio, ¿puedo saber sobre qué base asignaste el valor de la sesión en HEADERS? ¿Puedes dejarlo claro? Ejemplo, el sessionId que obtuve es SESS29af1facda0a866a687d5055f2fade2c pero en su respuesta tiene más longitud.
Ramaraju.d
El valor de la sesión en HEADERS consiste en session_name y session_id. es decir, la sesión es la variable y su valor consiste en session_name = session_id. session = (session_name = session_value)
inizio
Dice 401: No autorizado: la validación CSRF falló. Di lo siguiente como encabezados nombre = valor de sesión = SESS29af1facda0a866a687d5055f2fade2c = gBVoqtkN2ZNjDyOjIfpz47oQpnmCKytcgHOCHZhKRzo
Ramaraju.d
Si funcionó. Pero el único problema, el artículo CCK tiene título, nombre_campo, cuerpo, pero solo se guarda el título y se crea el nodo, pero el campo cuerpo y nombre están vacíos. Cómo superar esto.
Ramaraju.d
7

Para Drupal 7 y Servicios 7.x-3.x

Paso 1: emita una solicitud de publicación de user.loginrecursos con su nombre de usuario y contraseña.

Si el inicio de sesión es exitoso, obtendrá un objeto de respuesta con 4 propiedades:

  • nombre_sesión
  • sessid
  • simbólico
  • usuario (objeto)

Captura de pantalla del cartero de Google Chrome Captura de pantalla del cartero de Google Chrome

Paso 2: emita una solicitud de publicación nodecon 2 encabezados

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

Captura de pantalla del cartero de Google Chrome Captura de pantalla del cartero de Google Chrome

Muhammad Reda
fuente
Intenté usar <endpoint> /user.login pero no responde: prntscr.com/gru4y6 , no estoy seguro de qué estoy haciendo mal.
Patoshi パ ト シ
0

Si realiza POST en la API REST , deberá colocar todo en los datos POST , no en la URL . En Cartero , puede configurar la solicitud para publicar, luego escriba ay x-www-form-urlencodeddebajo de que puede agregar sus valores de datos. No olvide agregar estado, uid, idioma, tipo, título y luego los valores adicionales. La URL del recurso debe ser solo HOST/REST_API_PATH/node.

Itarato
fuente
1
Poco confuso Ok, ¿puedes decirme cuáles deberían ser los parámetros para crear un nuevo artículo? Si no te importa, ¿puedes publicar un ejemplo o un enlace para que pueda tener un concepto claro!
Ramaraju.d