Punto final personalizado de la API REST de WordPress para el método POST

3 minutos de lectura

Actualmente estoy trabajando en un proyecto que requiere un sitio web de WordPress y una API REST simple. Descubrí que WordPress tiene su propia API REST y decidí ampliar su funcionalidad para satisfacer mis necesidades. Todo lo que necesito hacer es tener puntos finales para las solicitudes GET y POST que recuperan/insertan datos de/a una tabla que no está directamente relacionada con WordPress (pero en la misma base de datos). Implementé con éxito todas las solicitudes GET, sin embargo, estoy luchando para que las POST funcionen.
Tengo este registro de ruta definido:

register_rest_route('api/v1', 'create-player/', array(
        'methods' => 'POST',
        'callback' => 'create_player',
));

El cliente envía una solicitud a través de una llamada ajax que se espera que llegue al punto final de la ruta anterior. Este es el ajax:

    $.ajax({
       method: "POST",
       url: '/wp-json/api/v1/create-player/',
       data : JSON.stringify(data),
       contentType: 'applcation/json',
       beforeSend: function (xhr){
           xhr.setRequestHeader("X-WP-None", locData.nonce);
           console.log('beforeSend');
       },
       success: function(response){
           console.log("success" + response);
       },
       fail: function (response){
           console.log("fail" + response);
       }
    });

No estoy seguro de cómo construir el registro de ruta POST desde la API REST, las otras solicitudes GET tienen un atributo args que se asignan directamente a los parámetros pasados ​​en el punto final. ¿Necesito algo así para manejar los datos de solicitud cuando uso POST? ¿Cómo obtengo el tipo de datos pasado desde ajax y luego lo uso en mi función? create_player(); La documentación de la API REST de WP parece estar incompleta y toda la información que encontré usa puntos finales para las funciones integradas de WordPress, como publicaciones/autores/blogs, etc. pero no necesito eso, solo quiero usar la funcionalidad provista y crear mi propia interfaz. Gracias.

  • FYI, no hay nada REST sobre esa API.

    – Siempre

    26 de mayo de 2017 a las 1:18

  • @Evert Bien, entiendo que los métodos POST y GET no están bajo el mismo punto final (en este caso para/player) y tener una API “más tranquila” es exactamente lo que estoy tratando de lograr. En el ejemplo anterior, separé el método POST de los otros puntos finales para aclarar mi pregunta. Aunque no pude entender cómo funcionan las solicitudes POST de la API REST de WP, logré implementar una solución tonta al pasar un JSON a la URL al enviar una solicitud POST, de esta manera puedo obtener los datos reales y manipularlos. Pero todavía me encantaría entender cómo manejar esta situación correctamente…

    – sótano

    28 de mayo de 2017 a las 17:08

  • No puedo ayudarte mucho con wordpress, pero si estás interesado en desarrollar mejores apis REST, te recomiendo que leas esto: martinfowler.com/articles/richardsonMaturityModel.html si no eres ‘Nivel 3’, técnicamente no eres REST.

    – Siempre

    29 de mayo de 2017 a las 0:19

  • Su solicitud tiene un error ortográfico en el parámetro contentType para la llamada $.ajax.

    – Nathan Moinvaziri

    29 de agosto de 2018 a las 12:58

en su función de devolución de llamada puede usar algo como esto:

 $param = $request->get_param( 'some_param' );

  // You can get the combined, merged set of parameters:
 $parameters = $request->get_params();

https://www.coditty.com/code/wordpress-api-custom-route-access-post-parameters

¡Finalmente lo encontré! Para acceder al cuerpo de la solicitud POST use $request->get_body(); en tus register_rest_route método de devolución de llamada.

  • Señor, quiero usar el “método de publicación” en el punto final personalizado usando “register_rest_route”. Porque quiero obtener el usuario que ha iniciado sesión actualmente en wordpress desde la aplicación. ¿Cómo puedo hacer esto, señor?

    – navaja

    13 de febrero de 2019 a las 12:30

Agregue POST en los métodos mientras registra la ruta y en su función de devolución de llamada acceda a sus variables POST a través de $request formación. Eso es todo.

¿Ha sido útil esta solución?