Tôi có thể sử dụng REST-API trên định dạng permalink đơn giản không?


9

Gần đây, tất cả các yêu cầu REST-API của tôi đột nhiên chuyển sang trả về lỗi 404, Mọi yêu cầu (không có vấn đề về điểm cuối tùy chỉnh hoặc tích hợp).

Sau đó, tôi nghĩ rằng đó là do cấu trúc của permalink. /wp-json/không thể truy cập dưới permalink đơn giản, vì đơn giản là không có quy tắc chuyển hướng có sẵn tại thời điểm này.

Có thể sử dụng các điểm cuối REST trong tình huống này không? Cả tùy chỉnh và tích hợp.

Câu trả lời:


16

Có bạn có thể. Chỉ cần thêm rest_routetham số truy vấn.

Vì thế

https://wordpress.org/wp-json/

sẽ trở thành

https://wordpress.org/?rest_route=/

Hoặc https://wordpress.org/wp-json/wp/v2/sẽ trở thành https://wordpress.org/?rest_route=/wp/v2để cho bạn một ví dụ đầy đủ hơn.

Vì vậy, bạn đang tự hỏi làm thế nào để quyết định sử dụng cái nào? Đừng lo lắng nữa, có một chức năng cho điều đó:get_rest_url()

Một tùy chọn khác là theo mặc định, có một <link>tiêu đề cung cấp cho bạn root API.

<link rel='https://api.w.org/' href='https://wordpress.org/wp-json/' />

Vì vậy, trong trường hợp bạn cần tìm ra điều đó từ phía máy khách, bạn chỉ cần sử dụng một cái gì đó dọc theo dòng

document.querySelectorAll('link[rel="https://api.w.org/"]')[0].getAttribute('href');

Vì vậy, về cơ bản, bạn không nên lấy wp-jsonphần như đã cho (và mã hóa cứng) mà luôn luôn xây dựng nó một cách linh hoạt bằng cách sử dụng get_rest_url()hoặc cách tiếp cận JS được đề cập ở trên.


Vì vậy, nếu tôi muốn sử dụng nó đơn giản, nó sẽ là một cái gì đó như thế https://wordpress.org/?rest_route=SOMEPATH&value1=X&value2=Ynào? Điều này có nghĩa là tôi cần phải có điều kiện để phát hiện cấu trúc permalink và thay đổi tuyến REST dựa trên điều đó?
Jack Johansson

Có lẽ không phải là một điều kiện nhưng bạn cần phải xây dựng nó một cách linh hoạt. Xem các chỉnh sửa ở trên.
kraftner

Làm thế nào bạn sẽ sử dụng tuyến đường này với jsonp? Tôi đã thử /?rest_route=/?_jsonp=callBackfnnhưng nhận được trạng thái 404.
dịch chuyển đỏ

@redshift Thông thường vui lòng mở một câu hỏi riêng cho những thứ như thế này. Trong trường hợp của bạn, bạn nên đọc lên các dấu phân cách chuỗi truy vấn en.wikipedia.org/wiki/Query_opes#Str struct Bạn cần viết nó như thế này/?rest_route=/&_jsonp=callBackfn
kraftner

1

Bạn có thể thêm một lần viết lại trên máy chủ web của bạn.

Ví dụ cho nginx

location ~ ^/wp-json/ {
    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
}

0

Các rest_routetham số truy vấn là Ugly(lựa chọn từ ngữ không phải của tôi Wordpress của) phong cách của Permalink. Bạn có thể thay đổi kiểu permilink thành Post namenhư minh họa trong ảnh chụp màn hình bên dưới và wp-jsontuyến đường sẽ có thể truy cập được trong URL. Có thể các phong cách permilink khác sẽ hoạt động, nhưng Post namelàm việc cho tôi và tôi đã không khám phá ra ngoài điều đó

Nhấn vào nút minh họa hình ảnh để thay đổi cài đặt

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.