REST API: Nu s-a găsit nicio rută care să corespundă URL-ului și metodei de solicitare

8 oct. 2019, 15:17:07
Vizualizări: 28K
Voturi: 3

Am probleme la adăugarea unei rute personalizate REST API în WordPress. Folosind propriul meu plugin, am înregistrat ruta astfel:

add_action( 'rest_api_init', function() {
  register_rest_route( $namespace, 'handler_mijnenergie', array(
    'methods'   => '\WP_REST_Server::CREATABLE ',
    'callback'  => [ $this, 'handle_energie_data' ]
  ), false );
} );

Când apelez namespace-ul "/wp-json/watz/v1" primesc un răspuns corect în Postman că ruta este afișată. Captură de ecran Postman arătând răspunsul API pentru namespace

Cu toate acestea, când încerc să accesez cererea rutei direct, primesc o eroare 404. Până acum am încercat:

  • Rescrierea permalink-urilor
  • Utilizarea fișierului .htaccess standard WordPress
  • Dezactivarea plugin-urilor
  • Modificarea metodei/namespace-ului și a cererii
  • Testarea rutelor altor plugin-uri precum Yoast sau Contact Form 7 (acestea funcționează)

Aveți vreo idee ce ar putea cauza această problemă și ce trebuie să modific pentru a o face să funcționeze?

0
Toate răspunsurile la întrebare 1
1

Acest lucru se întâmplă din cauza modului în care ați definit metodele acceptate:

'methods'   => '\WP_REST_Server::CREATABLE ',

Nu ar trebui să folosiți ghilimele în jurul acesteia. WP_REST_Server::CREATABLE este un șir de caractere care este echivalent cu 'POST', dar prin adăugarea ghilimelelor, setați literalmente metoda ca '\WP_REST_Server::CREATABLE', care nu este o metodă HTTP validă. Puteți vedea acest lucru în răspunsul la endpoint-ul de namespace.

Setați-o astfel:

'methods' => WP_REST_Server::CREATABLE

Sau, dacă fișierul dvs. utilizează un namespace PHP, astfel:

'methods' => \WP_REST_Server::CREATABLE

Sau adăugați aceasta în partea de sus a fișierului:

use WP_REST_Server;

Apoi asigurați-vă că atunci când accesați ruta direct, utilizați metoda corectă. Dacă utilizați WP_REST_Server::CREATABLE, atunci endpoint-ul va răspunde doar la cererile POST, astfel încât cererile GET vor returna un 404, ceea ce include și atunci când accesați endpoint-ul prin browser.

8 oct. 2019 16:32:05
Comentarii

Mulțumesc pentru feedback, a funcționat perfect! Am învățat ceva nou astăzi :)

BroodjeBE BroodjeBE
9 oct. 2019 11:19:45