[HTTP API] Tài liệu tham khảo HTTP API developer.wordpress.org (ok)

https://developer.wordpress.org/plugins/http-api

GETting data from an API

Lấy dữ liệu được thực hiện cực kỳ đơn giản trong WordPress thông qua hàm wp_remote_get (). Hàm này nhận hai đối số sau:

$ url - Tài nguyên để lấy dữ liệu từ. Đây phải ở định dạng HTTP tiêu chuẩn
$ args - TÙY CHỌN - Bạn có thể chuyển một loạt các đối số vào đây để thay đổi hành vi và tiêu đề, chẳng hạn như cookie, chuyển hướng theo dõi, v.v.

Các giá trị mặc định sau được giả định, mặc dù chúng có thể được thay đổi thông qua tham số $ args:

method – GET
timeout – 5 – How long to wait before giving up
redirection – 5 – How many times to follow redirections.
httpversion – 1.0
blocking – true – Should the rest of the page wait to finish loading until this operation is complete?
headers – array()
body – null
cookies – array()

Let’s use the URL to a GitHub user account and see what sort of information we can get

$response = wp_remote_get( 'https://api.github.com/users/blobaugh' );

GET the body you always wanted

Just the body can be retrieved using wp_remote_retrieve_body(). This function takes just one parameter, the response from any of the other wp_remote_X functions where retrieve is not the next value.

$response = wp_remote_get( 'https://api.github.com/users/blobaugh' );
$body     = wp_remote_retrieve_body( $response );

GET the response code

You may want to check the response code to ensure your retrieval was successful. This can be done via the wp_remote_retrieve_response_code() function:

$response = wp_remote_get( 'https://api.github.com/users/blobaugh' );
$http_code = wp_remote_retrieve_response_code( $response );

GET a specific header

If your desire is to retrieve a specific header, say last-modified, you can do so with wp_remote_retrieve_header(). This function takes two parameters

$response – The response from the get call
$header – Name of the header to retrieve

To retrieve the last-modified header

$response      = wp_remote_get( 'https://api.github.com/users/blobaugh' );
$last_modified = wp_remote_retrieve_header( $response, 'last-modified' );

GET using basic authentication

Các API được bảo mật hơn cung cấp một hoặc nhiều loại xác thực khác nhau. Một phương pháp xác thực phổ biến, mặc dù không bảo mật cao là Xác thực cơ bản HTTP. Nó có thể được sử dụng trong WordPress bằng cách chuyển ‘Authorization’ cho tham số thứ hai của hàm wp_remote_get (), cũng như các hàm phương thức HTTP khác.

$args = array(
  'headers' => array(
    'Authorization' => 'Basic ' . base64_encode(YOUR_USERNAME . ':' . YOUR_PASSWORD),
  ),
);
wp_remote_get($url, $args);

POSTing data to an API

Các phương thức trợ giúp giống nhau (wp_remote_retrieve_body (), v.v.) có sẵn cho tất cả các lệnh gọi phương thức HTTP và được sử dụng theo cùng một kiểu.

Quá trình ĐĂNG dữ liệu được thực hiện bằng cách sử dụng hàm wp_remote_post () và nhận các tham số chính xác như wp_remote_get (). Cần lưu ý ở đây rằng bạn bắt buộc phải chuyển TẤT CẢ các phần tử trong mảng cho tham số thứ hai. Codex cung cấp các giá trị mặc định được chấp nhận. Lúc này bạn chỉ cần quan tâm đến dữ liệu mình đang gửi nên các giá trị khác sẽ được mặc định.

Để gửi dữ liệu đến máy chủ, bạn sẽ cần phải xây dựng một mảng dữ liệu liên kết. Dữ liệu này sẽ được gán cho giá trị 'body'. Từ phía máy chủ của mọi thứ, giá trị sẽ xuất hiện trong biến $ _POST như bạn mong đợi. tức là if body => array ('myvar' => 5) trên máy chủ $ _POST ['myvar'] = 5.

Vì GitHub không cho phép ĐĂNG lên API được sử dụng trong ví dụ trước, ví dụ này sẽ giả vờ rằng nó có. Thông thường, nếu bạn muốn ĐĂNG dữ liệu lên một API, bạn sẽ cần liên hệ với những người duy trì API và nhận khóa API hoặc một số dạng mã xác thực khác. Điều này chỉ đơn giản chứng minh rằng ứng dụng của bạn được phép thao tác dữ liệu trên API giống như cách đăng nhập vào trang web như cách người dùng thực hiện với trang web.

Giả sử chúng tôi đang gửi một biểu mẫu liên hệ với các trường sau: tên, email, chủ đề, nhận xét. Để thiết lập phần thân, chúng ta làm như sau:

$body = array(
    'name'    => 'Jane Smith',
    'email'   => 'some@email.com',
    'subject' => 'Checkout this API stuff',
    'comment' => 'I just read a great tutorial. You gotta check it out!',
);

Now we need to set up the rest of the values that will be passed to the second parameter of wp_remote_post()

$args = array(
    'body'        => $body,
    'timeout'     => '5',
    'redirection' => '5',
    'httpversion' => '1.0',
    'blocking'    => true,
    'headers'     => array(),
    'cookies'     => array(),
);

Then of course to make the call

$response = wp_remote_post( 'http://your-contact-form.com', $args );

Xem ví dụ đã hoàn thành ở đây để hiểu rõ wpremote_post https://app.gitbook.com/@wordpress-lionel/s/project/wp_remote_post-ok

HEADing off bandwidth usage

Việc kiểm tra trạng thái tài nguyên bằng HEAD trước khi truy xuất có thể khá quan trọng và đôi khi được yêu cầu bởi API. Trên các API có lưu lượng truy cập cao, GET thường bị giới hạn ở số lượng yêu cầu mỗi phút hoặc giờ. Thậm chí không cần thử yêu cầu GET trừ khi yêu cầu HEAD cho thấy dữ liệu trên API đã được cập nhật.

Như đã đề cập trước đây, HEAD chứa dữ liệu về việc dữ liệu đã được cập nhật hay chưa, dữ liệu có nên được lưu vào bộ nhớ cache hay không, khi nào hết hạn bản sao được lưu trong bộ nhớ cache và đôi khi giới hạn tốc độ đối với các yêu cầu đối với API.

Quay lại ví dụ GitHub, đây là một số tiêu đề cần lưu ý. Hầu hết các tiêu đề này là tiêu chuẩn, nhưng bạn phải luôn kiểm tra tài liệu API để đảm bảo bạn hiểu tiêu đề nào được đặt tên là gì và mục đích của chúng.

x-ratelimit-limit - Số lượng yêu cầu được phép trong một khoảng thời gian
x-ratelimit-remaining - Số lượng yêu cầu có sẵn còn lại trong khoảng thời gian
content-length - Độ lớn của nội dung tính bằng byte. Có thể hữu ích để cảnh báo người dùng nếu nội dung khá lớn
last-modified - Khi tài nguyên được sửa đổi lần cuối. Rất hữu ích cho các công cụ bộ nhớ đệm
cache-control - Ứng dụng khách nên xử lý bộ nhớ đệm như thế nào

The following will check the HEAD value of my GitHub user account:

$response = wp_remote_head( 'https://api.github.com/users/blobaugh' );

$response should look similar to

Array(
    [headers] => Array
        (
        [server] => nginx
        [date] => Fri, 05 Oct 2012 05:21:26 GMT
        [content-type] => application/json; charset=utf-8
        [connection] => close
        [status] => 200 OK
        [vary] => Accept
        [x-ratelimit-remaining] => 4982
        [content-length] => 594
        [last-modified] => Fri, 05 Oct 2012 04:39:58 GMT
        [etag] => "5d5e6f7a09462d6a2b473fb616a26d2a"
        [x-github-media-type] => github.beta
        [cache-control] => public, s-maxage=60, max-age=60
        [x-content-type-options] => nosniff
        [x-ratelimit-limit] => 5000
    )
    [body] =>
    [response] => Array
        (
        [preserved_text 39a8515bd2dce2aa06ee8a2a6656b1de /] => 200
        [message] => OK
    )
    [cookies] => Array(
    )
    [filename] =>
)

Tất cả các chức năng trợ giúp tương tự có thể được sử dụng trên chức năng này như với hai chức năng trước. Ngoại lệ ở đây là HEAD không bao giờ trả về một phần thân, vì vậy phần tử đó sẽ luôn trống.

Make any sort of request

Nếu bạn cần thực hiện một yêu cầu bằng phương thức HTTP không được hỗ trợ bởi bất kỳ chức năng nào ở trên, đừng lo lắng. Những người giỏi phát triển WordPress đã nghĩ đến điều đó và cung cấp wp_remote_request () một cách đáng yêu. Hàm này nhận hai tham số giống như wp_remote_get () và cho phép bạn chỉ định phương thức HTTP. Dữ liệu bạn cần chuyển là tùy thuộc vào phương pháp của bạn.

To send a DELETE method example you may have something similar to the following:

$args     = array(
    'method' => 'DELETE',
);
$response = wp_remote_request( 'http://some-api.com/object/to/delete', $args );

Introduction to caching

Bộ nhớ đệm là một phương pháp thực hành theo đó các đối tượng thường được sử dụng hoặc các đối tượng đòi hỏi thời gian đáng kể để xây dựng được lưu vào một kho lưu trữ đối tượng nhanh để truy xuất nhanh các yêu cầu sau này. Điều này ngăn chặn nhu cầu dành thời gian tìm nạp và xây dựng lại đối tượng. Bộ nhớ đệm là một chủ đề rộng lớn là một phần của tối ưu hóa trang web và có thể đi vào toàn bộ một loạt các bài báo. Những gì sau đây chỉ là phần giới thiệu về bộ nhớ đệm và một cách đơn giản nhưng hiệu quả để nhanh chóng thiết lập bộ đệm cho các phản hồi API.

Tại sao bạn nên lưu các phản hồi API vào bộ nhớ cache? Chà, con voi lớn trong phòng là do các API bên ngoài làm chậm trang web của bạn. Nhiều chuyên gia tư vấn sẽ cho bạn biết việc khai thác các API bên ngoài sẽ cải thiện hiệu suất trang web của bạn bằng cách giảm số lượng kết nối và xử lý nó thực hiện, cũng như tốn kém băng thông, nhưng đôi khi điều này không đúng.

Đó là một hành động cân bằng tốt giữa tốc độ máy chủ của bạn có thể gửi dữ liệu và lượng thời gian cần thiết để máy chủ từ xa xử lý yêu cầu, xây dựng dữ liệu và gửi lại. Khía cạnh thứ hai là nhiều API có số lượng yêu cầu hạn chế trong một khoảng thời gian và có thể là giới hạn về số lượng kết nối của một ứng dụng cùng một lúc. Bộ nhớ đệm giúp giải quyết những tình huống khó xử này bằng cách đặt một bản sao dữ liệu trên máy chủ của bạn cho đến khi nó cần được làm mới.

When should you cache?

Câu trả lời nhanh chóng cho điều này là luôn luôn , nhưng một lần nữa có những lúc bạn không nên. Nếu bạn đang xử lý dữ liệu thời gian thực hoặc API nói cụ thể không lưu vào bộ nhớ cache trong tiêu đề, bạn có thể không muốn lưu vào bộ nhớ cache, nhưng đối với tất cả các trường hợp khác, bạn nên lưu vào bộ nhớ cache bất kỳ tài nguyên nào được truy xuất từ API.

WordPress Transients

WordPress Transient cung cấp một cách thuận tiện để lưu trữ và sử dụng các đối tượng được lưu trong bộ nhớ cache. Người chuyển hoạt động trong một khoảng thời gian nhất định hoặc cho đến khi bạn cần chúng hết hạn khi tài nguyên từ API đã được cập nhật. Sử dụng chức năng tạm thời trong WordPress có thể là hệ thống bộ nhớ đệm dễ sử dụng nhất mà bạn từng gặp. Chỉ có ba chức năng để thực hiện tất cả các công việc nặng nhọc cho bạn.

Cache an object ( Set a transient )

Caching an object is done with the set_transient() function. This function takes the following three parameters:

$ transient - Tên của transient để tham khảo trong tương lai
$ value - Giá trị tạm thời
$ expiration - Bao nhiêu giây từ khi lưu tạm thời cho đến khi hết hạn

Ví dụ về lưu vào bộ nhớ đệm phản hồi thông tin người dùng GitHub từ trên trong một giờ sẽ là

$response = wp_remote_get( 'https://api.github.com/users/blobaugh' );
 
set_transient( 'prefix_github_userinfo', $response, 60 * 60 );

Get a cached object ( Get a transient )

Lấy một đối tượng được lưu trong bộ nhớ cache phức tạp hơn một chút so với việc thiết lập một đối tượng tạm thời. Bạn cần yêu cầu tạm thời, nhưng sau đó bạn cũng cần kiểm tra xem liệu tạm thời đó đã hết hạn chưa và có tìm nạp dữ liệu cập nhật hay không. Thông thường, lời gọi set_transient () được thực hiện bên trong lời gọi get_transient (). Dưới đây là một ví dụ về việc lấy dữ liệu tạm thời cho hồ sơ người dùng GitHub:

$github_userinfo = get_transient( 'prefix_github_userinfo' );
if ( false === $github_userinfo ) {
    // Transient expired, refresh the data
    $response = wp_remote_get( 'https://api.github.com/users/blobaugh' );
    set_transient( 'prefix_github_userinfo', $response, HOUR_IN_SECONDS );
}
// Use $github_userinfo as you will

Delete a cached object (Delete a transient)

Xóa một đối tượng được lưu trong bộ nhớ cache là dễ nhất trong tất cả các hàm tạm thời, chỉ cần chuyển cho nó một tham số là tên của đối tượng tạm thời và bạn đã hoàn tất.

To remove the Github user info:

delete_transient( 'blobaugh_github_userinfo' );

More information on transients can be found here.

Last updated