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

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

#### Contents <a href="#ftwp-header-title" id="ftwp-header-title"></a>

1. [API là gì có ăn được không ?](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-api-la-gi-co-an-duoc-khong)
2. [Tại sao lại có API ?](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-tai-sao-lai-co-api)
3. [Có những loại API nào ?](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-co-nhung-loai-api-nao)
4. [API có hình thù như thế nào ?](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-api-co-hinh-thu-nhu-the-nao)
5. [Cách gọi API trong WordPress.](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-cach-goi-api-trong-wordpress)
   1. [wp\_remote\_post](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-wp_remote_post)
   2. [wp\_remote\_get](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-wp_remote_get)
   3. [wp\_remote\_request](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-wp_remote_request)
   4. [Lấy dữ liệu trả về ra sao ?](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-lay-du-lieu-tra-ve-ra-sao)
   5. [wp\_remote\_post và wp\_remote\_get khác nhau ở chỗ nào ?](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-wp_remote_post-va-wp_remote_get-khac-nhau-o-cho-nao)
6. [Kết Luận](https://hoangquoclong.com/2019/08/19/wordpress-apiphan-1-cach-goi-api-trong-wordpress/?fbclid=IwAR18SB6Y2qq2zEY4qJqb-L0FJeH1sBKHGPwK7wCwexo-2YF2U67LWzOavrc#ftoc-ket-luan)

Đố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 ?** <a href="#ftoc-api-la-gi-co-an-duoc-khong" id="ftoc-api-la-gi-co-an-duoc-khong"></a>

**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 ?** <a href="#ftoc-tai-sao-lai-co-api" id="ftoc-tai-sao-lai-co-api"></a>

**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 ![😀](https://s.w.org/images/core/emoji/12.0.0-1/svg/1f600.svg)

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 ?** <a href="#ftoc-co-nhung-loai-api-nao" id="ftoc-co-nhung-loai-api-nao"></a>

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 ?** <a href="#ftoc-api-co-hinh-thu-nhu-the-nao" id="ftoc-api-co-hinh-thu-nhu-the-nao"></a>

Đầu tiên bạn cài extenstions này của chrome: [https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa?hl=vi](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](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](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.**&#x20;

**=> 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**](http://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_](http://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.** <a href="#ftoc-cach-goi-api-trong-wordpress" id="ftoc-cach-goi-api-trong-wordpress"></a>

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](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\_post** và **wp\_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** <a href="#ftoc-ket-luan" id="ftoc-ket-luan"></a>

Ở 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.**_
