Nếu bạn đang đọc bài viết này thì mình dám chắc bạn cũng đã có một số kiến thức trên cơ bản hiểu biết về các thuật ngữ như: REST API, RESTFULL, WEBSERVICE, MICRO SERVICE. Do đó mình sẽ không đi đâu, và giới thiệu về các thuật ngữ và công nghệ vừa liệt kê bên trên mà đi thẳng vào nội dung chính REST API trong WORDPRESS.

Như bạn đã biết theo xu hướng công nghệ, nhà nhà đều REST, người người đều REST nên wordpress cũng triền khai công kết nối REST API trong mã nguồn của mình kế từ phiên bản 4.7, còn các phiên bản củ hơn thì cũng có đa số các plugin đang hỗ trợ, tuy nhiên wordpress là mã nguồn mở do đó chu trình update rất nhanh tội gì chúng ta không nâng cấp lên để sử dụng phiên bản tốt hơn. Lấy thời điểm ngay lúc viết bài này thì WordPress 4.9.2 đã xuất bản phiên bản thứ 2 của rest api. Bạn có thể xem thêm thông tin tại địa chỉ web này http://v2.wp-api.org/

Giới thiệu WordPress Api Rest

WordPress Rest Api cung cấp cho người dùng giao thức kết nối dữ liệu các tài nguyên như: media, post, page, category … một cách độc lập cho phép các lập trình viên gửi và nhận dữ liệu JSON(JavaScript Object Notation) giữa ứng dụng họ đang phát triển với engine của wordpress. Việc chuyển nhận giao tiếp qua lại đối với wordpress đều được trả kết quả 100 thành các chuỗi ký tự JSON, điều này giúp các lập trình viên dễ dàng sử lý các thao tác với nội dung mà WordPress quản lý mà không phụ thuộc vào ngôn ngữ nền tảng triển khai của Developer.

Cách dùng WordPress Api

Endpoint chính của WordPress REST API là : giaothuc://tendomain.phanmorong/wp-json lấy ví dụ như website mình là: https://danglong.name.vn/wp-json. Bạn nên sử dụng PostMan để test các tính năng trong Endpoint này, như hình bên dưới là kết quả khi lấy danh sách 10 posts đầu trong web site của mình:

Kết quả trà về từ wordpress

Kết quả trà về từ wordpress

Và đây là kết quả JSON được wordpress trả về khi lấy danh sách các categories:

[
    {
        "id": 1,
        "count": 1,
        "description": "",
        "link": "https://danglong.name.vn/lap-trinh-android/",
        "name": "Lập trình Android",
        "slug": "lap-trinh-android",
        "taxonomy": "category",
        "parent": 0,
        "meta": [],
        "_links": {
            "self": [
                {
                    "href": "https://danglong.name.vn/wp-json/wp/v2/categories/1"
                }
            ],
            "collection": [
                {
                    "href": "https://danglong.name.vn/wp-json/wp/v2/categories"
                }
            ],
            "about": [
                {
                    "href": "https://danglong.name.vn/wp-json/wp/v2/taxonomies/category"
                }
            ],
            "wp:post_type": [
                {
                    "href": "https://danglong.name.vn/wp-json/wp/v2/posts?categories=1"
                }
            ],
            "curies": [
                {
                    "name": "wp",
                    "href": "https://api.w.org/{rel}",
                    "templated": true
                }
            ]
        }
    },
    {
        "id": 8,
        "count": 1,
        "description": "",
        "link": "https://danglong.name.vn/server-vps-hosting/",
        "name": "Server, Vps, Hosting",
        "slug": "server-vps-hosting",
        "taxonomy": "category",
        "parent": 0,
        "meta": [],
        "_links": {
            "self": [
                {
                    "href": "https://danglong.name.vn/wp-json/wp/v2/categories/8"
                }
            ],
            "collection": [
                {
                    "href": "https://danglong.name.vn/wp-json/wp/v2/categories"
                }
            ],
            "about": [
                {
                    "href": "https://danglong.name.vn/wp-json/wp/v2/taxonomies/category"
                }
            ],
            "wp:post_type": [
                {
                    "href": "https://danglong.name.vn/wp-json/wp/v2/posts?categories=8"
                }
            ],
            "curies": [
                {
                    "name": "wp",
                    "href": "https://api.w.org/{rel}",
                    "templated": true
                }
            ]
        }
    }
]

Lưu ý: cách tiếp cận và sử dụng các Api bạn có thể xem tại link document phía trên mình đã đề cập. Bài viết này chỉ nêu số cách tiếp cận cho bạn và giải đáp một số khúc mắc khi sử dụng.

Các lưu ý khi sử dụng WordPress API

a. Giới hạn kết quà tìm kiếm

Về mặc định để đảm bảo kết quả tìm kiếm trả về là nhanh nhất, cũng như đảm bảo hiệu xuất thì WordPress quy định chỉ trà về mỗi lần 10 kết quả, đa phần các dữ liệu điều được tiếp cận theo cách này, để có thể lấy hết tất cả nội dung bạn cần tự triển khai cách ghép nối từ các kết quả JSON với nhau. Tuy nhiên, WP cũng cung cấp cách quy định số lượng trả về:

// Lấy 10 kết quả danh mục đầu tiên
https://danglong.name.vn/wp-json/wp/v2/categories
//Lấy 10 kết quả của trang 1
https://danglong.name.vn/wp-json/wp/v2/categories?page=1
//Lấy 5 kết quả đầu tiên của trang 1
https://danglong.name.vn/wp-json/wp/v2/categories?page=1&per_page=5

Đọc rõ ràng các mô tả lấy dữ liệu từ tài liệu đi kèm bạn sẽ có thế thao tác nhuần nhuyễn với REST API này.

b. Giới hạn các Fields trả về

WP v2API cung cấp rất nhiều các trường dữ liệu đi kèm trả về trong kết quả JSON đây là các trường thông tin mà WP cho rằng là quan trọng đối với đa số mọi lập trình viên. Tuy nhiên để đảm bảo băng thông, tăng nhanh tốc độ và tối ưu hóa trài nghiệm người dùng chúng ta các lập trình viên guru sẽ loại bỏ các trường dữ liệu dư thừa để có 1 kết quả là file JSON tuyệt đẹp. Để làm được điều này thì có 3 hướng tiếp cận

  1. Filter và loại bỏ các trường dữ liệu trả về qua các filter và hook mà WP cung cấp tại đây
  2. Sử dụng plugin giúp giàm bớt dữ liệu trả về JSON qua các đối số param pluin được khuyên dùng là: REST API – Filter Fields
  3. Sử dụng v2 API của phiên bản củ

3 cách tiêp cận trên được liệt kê theo thứ tự ưu tiên triển khai từ trên xuống, phương hướng số 3 là tệ nhất trong các trường hợp này, mình khuyên bạn nên loại bỏ cách này ra khỏi dự án của mình.

c. Làm sao lấy được thông số phân trang của JSON

1 băng khoăn thắc măc của đa số các ban vừa mới tiếp cận WP REST API V2 là không biết phân trang kết quả ra sao, làm sao lấy được các thông tin như: tổng số bài post, tổng số trang. Không có các thông tin đó thì rất khó để gải quyết các trường hợp khó trong việc phát triển tiếp. Thực ra nếu bạn tinh ý sẽ thấy rằng WP cung cấp các thông tin này bên trong Header trả về, cùng xem kết quả này ở đoạn header phía dưới

Access-Control-Allow-Headers →Authorization, Content-Type
Access-Control-Expose-Headers →X-WP-Total, X-WP-TotalPages
Allow →GET
Connection →keep-alive
Content-Encoding →gzip
Content-Type →application/json; charset=UTF-8
Date →Sat, 24 Feb 2018 06:14:37 GMT
Server →nginx
Transfer-Encoding →chunked
Vary →Accept-Encoding
X-Content-Type-Options →nosniff
X-Powered-By →EasyEngine 3.7.5
X-Robots-Tag →noindex
X-SRCache-Fetch-Status →BYPASS
X-SRCache-Store-Status →BYPASS
X-WP-Total →49
X-WP-TotalPages →49

Chú ý tới 2 dòng cuối là

X-WP-Total →49
X-WP-TotalPages →49

Với:

  • X-WP-Total →49 : tổng số bài posts
  • X-WP-TotalPages →49: tổng số trang
  • Vì X-WP-Total === X-WP-TotalPages nên kết quả là có 49 bài viết, có 49 trang và mỗi trang là 1 bài viết.

 

 

About the author

Kevin Dang

Hey there! My name is Kevin Dang, I am website, software, mobile app develop, web admin system. Expert living in Hồ Chí Minh (Việt Nam). I am very interested in digital marketing with: SEO, Facebook, Google Ads ... This blog is where I will share the experiences, techniques and knowledge I have learned.