[WordPress API][Phần 1] – Cách gọi API trong WordPress.

Đối với Webmaster, việc website chỉ chơi một mình mà không chơi ( kết nối ) với các hệ thống khác là 1 thiếu xót lớn giữa thời đại hệ thống nào cũng cung cấp API để các lập trình viên phát triển ứng dụng cho nền tảng của họ, có bao giờ bạn tự hỏi sao lại làm được chức năng đăng nhập website thông qua tài khoản facebook, google, đối với những bạn làm marketing sao lại có tools đăng bài 1 chỗ, mà nội dung đó lại đẩy lên được tất cả các nền tảng facebook, twitter, insta hay tại sao lại có tools đồng bộ được đơn hàng từ shopee, lazada, tiki về 1 chỗ để chủ shop có thể dễ dàng quản lý mà không cần login vào từng site ? Tất cả là nhờ API, vậy API là gì ? Sử dụng API trong WordPress như thế nào ? Mời các bạn đón đọc series về sử dụng API trong WordPress. Series này sẽ hướng dẫn từ cơ bản cách gọi API, đến việc sử dụng API để crawl bài viết từ website khác sang website của mình.

API là gì có ăn được không ?

API là cụm viết tắt của Application Programming Interface (giao diện lập trình ứng dụng). Đây là một giao tiếp phần mềm được dùng bởi các ứng dụng khác nhau. Cũng giống như bàn phím là thiết bị giao tiếp giữa người dùng và máy tính, thì API là giao tiếp phần mềm, ví dụ như giữa chương trình và hệ điều hành (OS).

Tại sao lại có API ?

API được sinh ra để làm bước trung gian đồng bộ các hệ thống với nhau, các hệ thống ở đây có thể là giữa website viết bằng WordPress và website viết bằng asp hay giữa website và app mobile, Google cung cấp API để chúng ta đưa ảnh lên và nó sẽ trả về kết quả trong ảnh có gì trong khi mình cũng không hề biết cái nền tảng Google kia nó được viết như thế nào 😀

Ví dụ thực tế mình đã từng làm cho 1 công ty fintech. Họ có app mobile, họ muốn xây dựng 1 website tin tức, chia sẻ những tip để tiết kiệm tiền, những kinh nghiệm đầu tư, ngoài ra, tin tức đó cũng được đồng bộ hiển thị được trên app mobile của họ, có những bài viết bắt buộc thành viên phải đăng nhập mới có thể xem được nội dung và bookmark bài viết cả trên website lẫn app mobile. Vậy làm sao 1 website có thể chơi với mobile như vậy ? Đó là nhờ dev website viết ra các API để dev mobile có thể get được bài viết về vv.., đồng thời dev mobile cũng viết API để xác nhận việc thành viên đăng nhập nếu thành viên đăng nhập trên website, bookmark bài viết vv…

Có những loại API nào ?

1. Hệ thống API trên nền tảng web, hay gọi là web API

2. Hệ thống API trên Hệ điều hành

3. Các API của thư viện phần mềm hoặc framework

Ở phạm vi bài viết này chúng ta chỉ cần quan tâm đến Web API.

API có hình thù như thế nào ?

Đầu tiên bạn cài extenstions này của chrome: https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa?hl=vi

Tiếp theo hãy truy cập vào link sau : https://hoangquoclong.com/wp-json/wp/v2/posts

Nhìn qua các bạn cũng có thể biết được đó là gì rồi đúng không nào ? Đó là list bài viết trên website của mình, cùng các thông tin như tiêu đề, ID bài viết, nội dung vv… Các bạn nhớ lấy cái giá trị của ID nhé.

Tiếp theo hãy thử vào link này https://hoangquoclong.com/wp-json/wp/v2/posts/ID

Thay ID bằng ID bạn thấy ở link đầu tiên, các bạn thấy gì ? nếu thay ID bằng 1, thì nội dung trả về là của bài viết [Cloudinary] Plugin đồng bộ ảnh WordPress lên mây. Tiết kiệm băng thông và tăng tốc độ tải ảnh lên đến 60%, nếu thay ID bằng 44 thì nội dung trả về là bài viết là [Shipping Viet Nam WooCommerce] Plugin tính phí vận chuyển & tạo vận đơn trực tiếp lên GHN, GHTK cho WooCommerce. 

=> Web API đơn giản là 1 URL thôi, trả về các dữ liệu dưới dạng JSON.

Tại sao phải là JSON ? vì JSON hỗ trợ tất cả ngôn ngữ lập trình, nên dù dùng ngôn ngữ nào lập trình viên cũng có thể lấy được dữ liệu từ JSON.

URL này có cấu trúc đường dẫn như thế nào ?, số lượng các params truyền vào ra sao ( cái giá trị ID nhập ở URL gọi là params ) thì tuỳ thuộc vào người viết ra API đó.

Một ví dụ API của zalo: graph.zalo.me/v2.0/me

Trong cấu trúc đường dẫn API, các nhà phát triển thường để 1 URL mặc định. Như Zalo là: graph.zalo.me ( gọi là host ) và v2.0/me  ( gọi là endpoint ), cái này để dễ đọc hiểu tài liệu thôi, còn khi gọi thực tế, ta đều gọi đến URL + endpoint.

  • /v2.0/me endpoint để lấy thông tin người dùng.
  • /v2.0/me/friends endpoit để lấy danh sách bạn bè.

Cách gọi API trong WordPress.

Có 3 cách gọi API trong WordPress

wp_remote_post

<?php 
$args = array(
    'timeout'     => 5,
    'redirection' => 5,
    'httpversion' => '1.0',
    'user-agent'  => 'WordPress/' . $wp_version . '; ' . home_url(),
    'blocking'    => true,
    'headers'     => array(),
    'cookies'     => array(),
    'body'        => null,
    'compress'    => false,
    'decompress'  => true,
    'sslverify'   => true,
    'stream'      => false,
    'filename'    => null
); 
$response = wp_remote_get( $url, $args ); 
?>

Trong đó:

  • $url: Là URL API
  • $args: Là 1 mảng các tham số truyền vào, tuỳ theo yêu cầu của API mà ta truyền thêm, còn bình thường chúng ta đều để trống. Thường thì chúng ta sẽ tuỳ chỉnh thời gian “Timeout
  • Timeout là thời gian đợi phản hồi khi ta gọi API, ví dụ chúng ta muốn lấy lấy tỉ giá từ API của Vietcombank, nhưng vì 1 lý do nào đó ( VCB nợ lương, sysadmin tắt server chẳng hạn ), nếu bạn set timeout quá dài thì website chúng ta cứ đợi phản hồi từ VCB mà không load tiếp dữ liệu khác của website dẫn đến bị trắng trang, hoặc để quá ngắn thì website chưa kịp connect thì đã close, thì làm sao lấy được dữ liệu về. Trong WordPress nếu chúng để trống, thời gian timeout mặc định là 5s

wp_remote_get

<?php
$args = array(
    'timeout'     => 5,
    'redirection' => 5,
    'httpversion' => '1.0',
    'user-agent'  => 'WordPress/' . $wp_version . '; ' . home_url(),
    'blocking'    => true,
    'headers'     => array(),
    'cookies'     => array(),
    'body'        => null,
    'compress'    => false,
    'decompress'  => true,
    'sslverify'   => true,
    'stream'      => false,
    'filename'    => null
); 
$response = wp_remote_get( $url, $args );
?>

Cách sử dụng cũng không khác gì với wp_remote_post

wp_remote_request

Ngoài 2 kiểu phổ biến trên ta cũng có 1 kiểu nữa là wp_remote_request, cách này mình chưa dùng bao giờ, vì cũng chưa gặp API yêu cầu gọi kiểu này.

Lấy dữ liệu trả về ra sao ?

Như code sample ở trên, nội dung API trả về sẽ được lưu ở biến $response, nhưng ngoài nội dung chúng ta quan tâm, nó còn trả về rất nhiều thông tin khác. Cụ thể là chúng ta chỉ quan tâm đến nội dung của body thôi.

Để lấy nội dung của body chúng ta có 2 cách.

  • $response[‘body’]: Lấy trực tiếp nội dung body
  • wp_remote_retrieve_body( $response ): Lấy nội dung body thông quan function của WordPress.

Lấy được nội dung body rồi, nhưng nội dung của nó vẫn đang là JSON. Chúng ta vẫn chưa thể lấy được từng phần nội dung mong muốn, bước tiếp theo là decode đoạn JSON đó, biến nó thành Object, để có thể truy cập được đến từng phần nội dung ( ID, title, content, thumbnail vv… )

$data = json_decode( wp_remote_retrieve_body( $response ) );

ok, vậy là đã lưu được giá trị, các bạn thử var_dump( $data ) để xem dữ liệu lấy được từ API như thế nào nhé.

wp_remote_post và wp_remote_get khác nhau ở chỗ nào ?

Việc sử dụng phương thức nào để gọi API tuỳ theo yêu cầu của người làm ra API đó, các bạn sẽ biết thông tin này khi đọc tài liệu của 1 API nào đó. Ví dụ https://developers.zalo.me/docs/api/social-api/tai-lieu/thong-tin-nguoi-dung-post-28 họ sẽ dùng phương thước GET

wp_remote_postwp_remote_get chúng có chức năng tương tự nhau, chỉ khác nhau ở cách chúng ta gửi params cho API.

  • Đối với wp_remote_get chúng ta truyền params qua URL khi gọi API luôn
  • Đối với wp_remote_post chúng ta truyền params qua body trong array.

Kết Luận

Ở bài viết này, các bạn đã được làm quen với một số khái niệm khi sử dụng API, params, endpoint, JSON và cách gọi 1 API trong WordPress cũng như lưu giá trị lấy được từ API vào biến. Bài viết tiếp theo sẽ giới thiệu với các bạn về các API mặc định của WordPress. WordPress đã xây dựng sẵn cho chúng ta rất nhiều các API, để các ứng dụng khác có thể lấy được biết viết của wesbite WordPress.

Đây là Phần 1 trong Series bài viết về WordPress API. Các bạn đón đọc các bài viết tiếp theo trong series sẽ được cập nhật hàng tuần nhé. Hãy nhấn chuông theo dõi để khỏi bỏ lỡ bài viết nào. Nếu có thắc mắc hoặc góp ý, vui lòng để lại comment bên dưới nhé.

Bản quyền bài viết thuộc về hoangquoclong.com vui lòng dẫn nguồn bài viết khi bạn trích dẫn bài viết này.

[WordPress API][Phần 1] – Cách gọi API trong WordPress.

[WordPress API][Phần 2] – Các API mặc định của WordPress.

[WordPress API][Phần 3] – Cách tạo 1 API mới cho WordPress.

[WordPress API][Phần 4] – Sử dụng WordPress API để lấy các bài viết trên website https://techsignin.com về website của mình.