Tạo RESTful webservice toàn tập cho wordpress

Quảng cáo
Ads_ngang
Website dinhthuanit.com có bài Tạo RESTful webservice toàn tập cho wordpress Ngày nay việc thiết kế website đã chú trọng tới Webservice, tạo dịch vụ API cho website là hướng mở để cho phép ứng dụng thứ 3 phát triển trên nhiều nền tảng ngoài WEB HTTP mà các công ty đi đầu trong lĩnh vực công nghệ thông tin luôn hướng tới.

restful_api-wp

Ngày nay việc thiết kế website đã chú ý tới Webservice, tạo dịch vụ API cho website là phía mở để cho phép phần mềm thứ 3 phát triển trên nhiều nền tảng ngoài WEB HTTP mà các công ty dẫn đầu trong nghề công nghệ tin tức luôn hướng tới.

Ví dụ: giới trẻ giờ đây tốn kém hơi nhiều thời gian trên facebook, trước kia họ phải vào web để trò chuyện, chat chit với bạn bè giờ đây chỉ cần phải có trong tay chiếc smartphone là cũng có thể sử dụng được rất mau chóng và tiện lợi. Bởi facebook đã phát triển ứng dụng trên android, IOS,..dựa trên các API khổng lồ mà người ta tạo ra.

Xây dựng web service mất hơi nhiều thời gian đòi hỏi tinh túy không thể hoàn thành trong trong ngày một ngày hai, tuy nhiên giải pháp tạo dịch vụ web service sau này là cách đơn giản nhất đối với wordpress. Một số web service bao gồm: RESTful, Soap, ..

Trong Bài bữa nay mình sẽ chỉ dẫn các bạn, cách tạo json API web service trong WordPress hay còn xem là RESTful.

json-api-wp

Bước đầu tiên các bạn tải plugin JSON API. Sau khi active plugin, vào trang cấu hình Settings-> JSON API

json-api-controllers

JSON API có thiết kế sẵn một số hàm, ví dụ để lấy nội dung của một post/page chúng ta có địa điểm api. Xuyên suốt hướng dẫn mình giả sử địa điểm web wordpress là: http://localhost/wordpress

 http://localhost/wordpress/api/get_post/?>  

– Truyền chỉ số post id vào hàm get_post. URL trả về nội dung của post dạng json. Kết quả:

 {"status":"ok","post":{"id":1,"type":"post","slug":"hello-world","url":"http://localhost/wp2/inox/2014/05/22/hello-world/","status":"publish","title":"Hello world!","title_plain":"Hello world!","content":" 

Welcome to wp test1 Sites . This is your first post. Edit or delete it, then start blogging!

n

n","excerpt":"

Welcome to wp test1 Sites. This is your first post. Edit or delete it, then start blogging!  

n","date":"2014-05-22 02:24:32","modified":"2014-05-22 03:20:06","categories":[],"tags":[],"author":{"id":2,"slug":"inox","name":"inox","first_name":"","last_name":"","nickname":"inox","url":"","description":""},"comments":[{"id":1,"name":"Mr WordPress","url":"http://localhost/wp2/","date":"2014-05-22 02:24:32","content":"

Hi, this is a comment.
nTo delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.

n","parent":0},{"id":2,"name":"Mr WordPress","url":"http://localhost/wp2/","date":"2014-05-22 02:24:32","content":"

Hi, this is a comment.
nTo delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.

n","parent":0}],"attachments":[],"comment_count":1,"comment_status":"open","custom_fields":{}}}

Mặc định api có địa chỉ: /api ,bạn cũng có thể thay đổi địa api này tại mục “API base”. Ví dụ mình sẽ đổi “/api/” thành “/hoangwebapi/” chúng ta có địa điểm api mới của hàm get_post là:

 http://localhost/wordpress/hoangwebapi/get_post/?>   

URL API trên đã được viết lại đường dẫn, URL chưa được viết lại có dạng cấu trúc tham số, ie:

 http://www.example.org/?json=get_post&post_>  

– này là cách gọi tường minh (Explicit Mode). Giải thích tham số:

  • json : tên hàm api.
  • Theo sau là các tham số sử dụng cho hàm đó.

Controllers

Các api có cùng vai trò được nhóm vào 1 file xem là controller. Các file này chứa trong folder “controllers”. Plugin JSON API có sẵn 4 nhóm api được chia vào các files: core.php , posts.php , respond.php , widgets.php , như hình trên bạn đã thấy.

Gọi api có chỉ định rõ tên controller.

– Các hàm api thuộc core controller thì mặc định không cần chỉ định tên controller. Ví dụ tương lai là cách chỉ định controller để gọi hàm api 1 cách chính xác. Sửa lại URL gọi hàm get_post :

 http://localhost/wp2/inox/api/core/get_post/?>  

Đối với cách gọi tường minh:

 http://www.example.org/?json=core.get_post&post_>  

Một tỉ dụ khác để lấy các recent posts. Chúng ta có URL:

 http://www.example.org/api/get_recent_posts/ 

Một số hàm API có sẵn

Hiện tại JSON API cung cấp khoảng 21 hàm api, các bạn xem hướng dẫn tại đây nhé: Hướng dẫn các hàm JSON API

Tất cả các hàm api đã có chỉ dẫn chi tiết trong file readme.txt đính kèm trong plugin. Mở file json-api/readme.txt với notepad++ và tìm từ “= Available controllers =”.

Tạo thêm hàm API

Tạo file controller mới tên “myapi.php” trong thư mục controllers. Sau đó khai báo controller vừa tạo, thêm vào theme functions.php:

 add_filter  (    'json_api_controllers'    ,     'add_my_controller'    )    ;     function   add_my_controller  (    $controllers    )     {     // Corresponds to the class JSON_API_myapi_Controller     $controllers    [    ]     =     'myapi'    ;     return     $controllers    ;     }   

– Filter json_api_controllers dùng để khai báo controller mới. Thêm chuỗi ‘myapi’ vào mảng $controllers plugin sẽ tìm lục file myapi.php chứa trong folder “plugins/json-api/controllers” và những controllers được khai báo ở folder khác. Nếu file không tồn tại, trong danh sách controllers sẽ báo lỗi:

 Error: Cannot find controller class 'json_api_xxx_controller' (filtered path: ). 

– Chú ý: Nếu bạn sử dụng JSON API plugin phiên bản mới cập nhật, thì chẳng cần khai báo controller. Trong filter json_api_controllers print nội dung của tham số $controllers sẽ thấy controller đã tự động khai báo. Việc khai báo thêm sẽ nhân đôi trong phần quản lý controllers.

– Địa chỉ controller sẽ là tên file chứa class controller đó. Không phân biệt viết hoa hay thường, có thể sử dụng một trong những địa chỉ của controller như sau:

 http://localhost/wordpress/api/myapi/ http://localhost/wordpress/api/Myapi/ http://localhost/wordpress/api/mYapi/ http://localhost/wordpress/api/MyApi/ http://localhost/wordpress/api/MYAPI/ ... 

Nếu myapi.php nằm ngoài thư mục controllers thì khai báo đường dẫn tới controller.

 add_filter  (    'json_api_myapi_controller_path'    ,     'Myapi_controller_path'    )    ;     function   Myapi_controller_path  (    $default_path    )     {     return     '/path/to/myapi.php'    ;     }   

Chú ý :

  • – Trong wordpress tất cả những hooks đều phải được viết thường , tỉ dụ trên nếu tên filter viết thành ‘json_api_Myapi_controller_path’ là sai, thậm chí tên controller có ký tự hoa ở đầu “Myapi”.
  • – Khuyến khích các controller bạn tạo nên nên đặt ngoài thư mục plugin JSON API vì nếu có update plugin này vẫn hiện diện dữ liệu.

Tạo class controller

Mở myapi.php với notepad++ khai báo thông tin controller bởi các loại sau đây:

    <   ?php   /* Controller name: TopVn API Controller description: mo ta hoangweb api. */     ?>    

Định nghĩa class, tiếp tục thêm vào myapi.php

   class   JSON_API_Myapi_Controller   {     public     function   hello_world  (    )     {     //append json vào kết quả outout : content-type: application/json     return     array    (     "message"     =>      "Hello, world"     )    ;     }     }   

Tên class có dạng: JSON_API_[file-name]_Controller, trong đấy [file-name] là tên file cũng có thể có thể viết hoa hay thường tùy ý. Như vậy class cũng có thể chấp nhận các tên sau:
JSON_API_myapi_Controller ,
JSON_API_Myapi_Controller ,
JSON_API_MyAPI_Controller ,
JSON_API_MYAPI_Controller ,
JSON_API_mYapi_Controller ,
JSON_API_mYApI_Controller

Ở controller trên chúng ta tạo hàm hello_world, để gọi hàm này trên trình duyệt nhập vào địa chỉ:

 http://localhost/wordpress/api/myapi/hello_world 

Kết quả nhận được:

 {"status":"error","error":"Unknown controller 'myapi'."} 

– Chúng ta thấy dòng chữ thông báo lỗi “Unknown controller ‘myapi'” nghĩa là controller này chưa được kích hoạt. Vào Settings-> JSON API tại dòng TopVn API bấm vào liên kết active bên dưới. Ok lúc này refresh lại trình duyệt. Chúng ta sẽ thấy kết quả:

 {"status":"ok","message":"Hello, world"} 

Chặn sử dụng hàm API

Tạm thời không phát hành hàm api hoặc chỉ dễ dàng bạn mong muốn khóa hàm api tạm thời vì đang dở dang xây dựng. Để chặn truy cập vào một hàm nào đó chúng ta khai báo độ rộng cho hàm sửa lại là private .

   private     function   hello_world  (    )     {     ....     }   

– Ngoài cách sửa đổi độ rộng của hàm JSON API có cung cấp hook để sửa đổi hàm. Chép đoạn code sau vào functions.php

 add_action  (    'json_api-myapi-hello_world'    ,     'my_disable_func'    )    ;     function   my_disable_func  (    )     {     exit    (    )    ;     }   

Giải thích: khi truy cập vào api “hello_world” sẽ thực thi action tương ứng của hàm hello_world là “json_api-myapi-hello_world”, theo thứ tự hàm này được gọi trước rồi mới đến nội dung của hello_world . Lợi dụng tính ưu tiên này chúng ta đặt lệnh kết thúc exit() .

Sử lý tham số cho hàm API

– Chúng ta có biến global $json_api để sử lý mọi dữ liệu, liên quan đến api. Để Lấy tham số từ URL, sử dụng cú pháp sau.

   function   ham1  (    )    {     global     $json_api    ;     #api/myapi/ham1/?var1=abc      #api?json=myapi.ham1&var1=abc      $val1     =     $json_api    ->     query    ->     var1    ;     //$val1='abc'       #api/myapi/ham1/?var2=234      $val2     =     $json_api    ->     query    ->     var2    ;     //$val2='234'       //tất cả những tham số lưu ở đối tượng query     $json_api    ->     query     }   

Tham khảo thêm về sử lý dữ liêu ở các controller mặc định.

Xuất lỗi

Mục đích Xuất lỗi thông báo về sử dụng sai api hoặc không có dữ liệu.

   $json_api    ->     error    (    "Include a 'key' and 'value' query var."    )    ;     //outout: {"status":"error","error":"Include a 'key' and 'value' query var."}   

– Bạn có thể sử dụng các wordpress template tag trong công đoạn xây dựng hàm api.

   public     function   ham2  (    )    {     global     $json_api    ;     $id    =    $json_api    ->     query    ->     id    ;     $post    =  get_post  (    $id    )    ;     ....     }   

Introspector and data models

Ngoài ra, JSON có 1 hàm tiện ích được nạp từ json-api/models, truy cập các hàm này thông qua introspector .

   // Retrieve posts based on custom field key/value pair     public     function   get_custom_posts  (    )     {     global     $json_api    ;       // Make sure we have key/value query vars     if     (    !    $json_api    ->     query    ->     key     ||     !    $json_api    ->     query    ->     value    )     {     $json_api    ->     error    (    "Include a 'key' and 'value' query var."    )    ;     }       // See also: http://codex.wordpress.org/Template_Tags/query_posts     $posts     =     $json_api    ->     introspector    ->     get_posts    (    array    (     'meta_key'     =>      $json_api    ->     query    ->     key    ,     'meta_value'     =>      $json_api    ->     query    ->     value     )    )    ;       return     array    (     'key'     =>      $key    ,     'value'     =>      $value    ,     'posts'     =>      $posts     )    ;     }   

Configuration options

Khai báo constant trong wp-config.php để enabled mặc định một số controllers

   define    (    'JSON_API_CONTROLLERS'    ,    'controller1,controller2,...'    )    ;     //mỗi controller cách nhau dấu ,   

Kết luận:
JSON API thích phù hợp với các dự án nhỏ, vì tính không đồng bộ tại sao lại vậy? môi trường chứa hàm api là độc lập, những hàm nằm ngoài môi trường kia sẽ không hoạt động. Tuy nhiên ngoài json api ra, chúng ta có dịch vụ soap-wsdl, soap là một lựa chọn tuyệt hảo cho bạn xem bài viết về soap tại đây.

Chúc bạn thành công!

Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng phương pháp đăng ký nhận bài viết mới ở bên dưới và đừng quên chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng cũng có thể có thể theo dõi blog này trên Twitter và Facebook

Bài viết Tạo RESTful webservice toàn tập cho wordpress được tổng hợp và biên tập bởi: dinhthuanit.com. Mọi ý kiến đóng góp và phản hồi vui lòng gửi Liên Hệ cho dinhthuanit.com để điều chỉnh. dinhthuanit.com xin cảm ơn.

Bài Viết Liên Quan


Bài Viết Khác


Quảng cáo
Ads_ngang