Parametro opzionale endpoint personalizzato API Rest Rest di Wordpress


15

È possibile utilizzare register_rest_route()con parametri opzionali in url?

Supponiamo che il percorso sia registrato in questo modo:

register_rest_route( 'api', '/animals/(?P<id>\d+)', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

Ora è possibile eseguire la chiamata api su url come / wp-json / api / animals / 15 , ma c'è un modo per dichiarare il parametro come opzionale per prendere anche il percorso come / wp-json / api / animals / .

Ho anche provato a dichiarare il percorso come di seguito, ma senza successo:

/animals/(?P<id>\d+)?

Puoi dichiarare un altro percorso senza il parametro o utilizzare i parametri GET, ma c'è un modo per farlo già nel register_rest_route()?

Grazie per i vostri suggerimenti.

Risposte:


18

È necessario inserire i parametri nominati del regex route in un gruppo di acquisizione facoltativo:

register_rest_route( 'api', '/animals(?:/(?P<id>\d+))?', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

Il secondo parametro è semplicemente una regex, quindi puoi usare la normale logica regex per renderla più complessa


3

Potrebbe esserci un modo per farlo con una register_rest_routechiamata di funzione, non so come farlo e sarebbe l' ideale. Tuttavia, duplicare la register_rest_routechiamata di funzione nel metodo hook farà quello che vuoi.

register_rest_route( 'api', '/animals/', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals'
] );

register_rest_route( 'api', '/animals/(?P<id>\d+)', [
   'methods' => WP_REST_Server::READABLE,
   'callback' => 'get_animals',
   'args' => [
        'id'
    ],
] );

È il metodo get_animals che vorrai avere condizioni che gestiscano ogni caso. Uno per se l' idarg è impostato e il fallback controlla le $_GETvariabili.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.