CÁC CÔNG CỤ KHAI THÁC REST API
Việc hiểu và kiểm tra các kiến trúc REST API khi chúng ta trong quá trình xây dựng phần mềm là rất quan trọng. Phần này sẽ đề cập đến một số công cụ được dùng trong REST API và làm thế nào để sử dụng các tính năng quan trọng nhất của chúng.
Postman
Một trong những công cụ phổ biến và hiệu quả là Postman. Phần mềm có một giao diện đơn giản và rất dễ sử dụng ngay cả khi bạn chỉ mới bắt đầu với Restful API. Postman có thể quản lý các tác vụ sau:
Hình vẽ bên dưới mô tả giao diện của vài ví dụ Postman đang dùng HTTP GET đến một máy chủ Postman Echo.
Postman cũng lưu trữ lịch sử của các lần gọi API để bạn có thể thực hiện lại nhanh chóng một cuộc gọi API. Postman cũng bao gồm các chức năng như tự động hoàn thành các HTTP headers và hỗ trợ hiển thị nhiều loại dữ liệu khác nhau như JSON, HTML và các loại dữ liệu nhiều thành phần.
Curl
Curl là một công cụ dòng lệnh có thể chạy trên bất kỳ nền tảng nào hay phần cứng nào. Với curl, chúng ta thường dùng các tùy chọn dòng lệnh sau:
-d: cho phép bạn truyền dữ liệu đến các server ở xa. Bạn có thể nhúng dữ liệu bên trong dòng lệnh hay truyền dữ liệu dùng một file.
-H: cho phép thêm một http header vào request.
-insecure: bỏ qua kiểm tra certificate.
-c: Lưu dữ liệu nhận được trên server. Có thể dùng lại các dữ liệu này với tùy chọn –b.
-b: Cho phép bạn truyền dữ liệu cookie data.
X: Cho phép chỉ ra phương thức HTTP method, mặc định là GET.
$ curl -sD - https://postman-echo.com/get?test=123
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Tue, 27 Aug 2019 04:59:34 GMT
ETag: W/"ca-42Kz98xXW2nwFREN74xZNS6JeJk"
Server: nginx
set-cookie:
sails.sid=s%3AxZUPHE3Ojk1yts3qrUFqTj_MzBQZZR5n.
NrjPkNm0WplJ7%2F%2BX9O7VU
TFpKHpJySLzBytRbnlzYCw; Path=/; HttpOnly
Vary: Accept-Encoding
Content-Length: 202
Connection: keep-alive
{"args":{"test":"123"},"headers":{"x-forwardedproto":"
https","host":"postmanecho.
com","accept":"*/*","useragent":"
curl/7.54.0","x-forwarded-
port":"443"},"url":"https://postmanecho.
com/get?test=123"}
Ví dụ dùng curl cho hàm POST
$ curl -sD - -X POST https://postmanecho.
com/post -H 'cache-control: no-cache'
-H 'content-type: text/plain' -d 'hello
DevNet'
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Tue, 27 Aug 2019 05:16:58 GMT
ETag: W/"13a-0lMLfkxl7vDVWfb06pyVxdZlaug"
Server: nginx
set-cookie:
sails.sid=s%3AwiFXmSNJpzY0ONduxUCAE8IodwNg9Z2Y.
j%2BJ5%2BOmch8XEq8jO1vzH8
kjNBi8ecJij1rGT8D1nBhE; Path=/; HttpOnly
Vary: Accept-Encoding
Content-Length: 314
Connection: keep-alive
{"args":{},"data":"hello DevNet","files":
{},"form":{},"headers":{"x-forwardedproto":"
https","host":"postmanecho.
com","contentlength":"
12","accept":"*/*","ca
che-control":"no-cache","contenttype":"
text/plain","useragent":"
curl/7.54.0","xforwardedport":"
443"},"json":null,"url":"https://postman
-echo.com/post"}
5.12.3. HTTPie
HTTPie là một công cụ hiện đại, thân thiện với người dùng và hỗ trợ nhiều nền tảng, được viết bằng Python. Công cụ này được thiết kế để tương tác dòng lệnh với CLI một cách dễ dàng. HTTPie được dùng chủ yếu cho kiểm tra, debugging và tương tác với các web server, dịch vụ web và các RESTful API. HTTPie hỗ trợ JSON, cho phép dùng HTTPS, proxies và các cơ chế xác thực. Nó cũng hỗ trợ các forms và các file uploads.
Python Requests
Requests là một module của Python cho phép bạn gửi các HTTP requests. Nó là thư viện với nhiều khả năng như truyền các thông số trong URL, gửi các header đã tùy biến hay xác thực SSL. Thư viện request là một công cụ hữu ích để bạn bắt đầu lập trình với API. Trong ví dụ dưới đây, các bạn sẽ được minh họa cách dùng thư viện để gửi các HTTP requests bằng Python. Requests là một thư viện bên ngoài nên nó cần được cài đặt trước khi bạn có thể sử dụng.
$ pip3 install requests
Để thêm vào các HTTP headers đối với một hàm gọi API request, bạn có thể truyền chúng trong dạng cấu trúc dữ liệu tự điển của Python (Python dict) trong phần giá trị thông số của headers. Tương tự, bạn có thể gửi các cookies đến một máy chủ cũng bằng cách dùng kiểu dict.
Ví dụ bên dưới mô tả một đoạn Python scripts sử dụng thư viện request và thực thi một hàm gọi API request đến máy chủ Postman Echo.
import requests
url = "https://postman-echo.com/get"
querystring = {"test":"123"}
headers = {}
response = requests.request("GET", url,
headers=headers, params=querystring)
print(response.text)
Ví dụ dưới đây là một đoạn chương trình dùng Python và thư viện Requests. Chương trình sẽ gọi POST đến máy chủ Postman Echo. Chú ý trường headers có các thông tin như content type và một trường mới gọi là payload. Để trả lời cho requests chúng ta có thông điệp response. Mọi thứ trong thông điệp response có thể được phân tách, sau đó các hành động kế tiếp có thể được thực hiện. Ví dụ này chỉ đơn giản in các giá trị của một vài thuộc tính của thông điệp response.
import requests
url = "https://postman-echo.com/post"
payload = "hello DevNet"
headers = {'content-type': "text/plain"}
response = requests.request("POST", url,
data=payload, headers=headers)
print(response.text)
Ví dụ dưới đây là một đoạn Python script đơn giản dùng thư viện Requests và thực hiện gọi GET đến máy chủ Postman Echo server. Bạn sẽ nhận thấy một sự khác nhau so với ví dụ trước là vấn đề xác thực. Với thư viện requests, vấn đề xác thực thường được thực hiện với từ khóa “authorization”, cùng với các giá trị type và key.
import requests
url = "https://postman-echo.com/basic-auth"
headers = {
'authorization': "Basic
cG9zdG1hbjpwYXNzd29yZA=="
}
response = requests.request("GET", url,
headers=headers)
print(response.text)
Các công cụ Debugging cho REST API
Khi bạn bắt đầu làm việc với Restful API, bạn sẽ gặp một số lỗi. Bạn có thể dùng một vài kỹ thuật để xác định các khía cạnh của vấn đề. Restful API sử dụng vài cơ chế để chỉ ra kết quả của việc gọi REST và các lỗi xảy ra trong quá trình xử lý. Bạn có thể dùng các phương thức này để bắt đầu quá trình debug cho một ứng dụng REST. Thông thường các lỗi trả về là gợi ý lớn nhất mà chúng ta nhận được. Khi chúng ta đã có thông tin này, chúng ta có thể dùng các công cụ như Postman và curl để thực thi tác vụ gọi API đơn giản và có thể quan sát các header của thông điệp gửi và nhận. Thêm vào đó, các công cụ được xây dựng tích hợp vào trong trình duyệt cho phép bạn theo dõi các dấu vết traces và thực thi các kiểu debug khác. Phần lớn các trình duyệt có tích hợp các công cụ dành cho developers. Chẳng hạn như Safari’s Web Development Tools, Chrome’s DevTools, và Firefox’s Developer Tools. Các công cụ này mặc định được tích hợp với trình duyệt và cho phép bạn kiểm tra các cuộc gọi API một cách nhanh chóng. Cuối cùng, nếu bạn hoạch định việc xây dựng các môi trường test của riêng bạn hay dùng công cụ sandbox, bạn có thể dùng các công cụ như Simple JSON Server. Đây là một máy chủ chạy mã nguồn mở. Bạn có thể chép về và chạy trong môi trường của bạn để học về RESTful API.
Việc hiểu và kiểm tra các kiến trúc REST API khi chúng ta trong quá trình xây dựng phần mềm là rất quan trọng. Phần này sẽ đề cập đến một số công cụ được dùng trong REST API và làm thế nào để sử dụng các tính năng quan trọng nhất của chúng.
Postman
Một trong những công cụ phổ biến và hiệu quả là Postman. Phần mềm có một giao diện đơn giản và rất dễ sử dụng ngay cả khi bạn chỉ mới bắt đầu với Restful API. Postman có thể quản lý các tác vụ sau:
- Gửi các tác vụ GET và POST
- Tạo và thực thư các tập hợp gồm một nhóm các hàm gọi requests và chạy các request theo một thứ tự xác định trước.
- Viết các bước kiểm tra (các đoạn scripts gọi request dùng các biến động để truyền dữ liệu giữa các biến…)
- Viết mộ chuỗi: đầu ra của một response là đầu vào của một phương thức requests khác.
- Tạo ra một đoạn code mẫu bằng nhiều ngôn ngữ lập trình khác nhau.
- Nạp vào các tập hợp collection được tạo ra bởi cộng đồng người dùng.
Hình vẽ bên dưới mô tả giao diện của vài ví dụ Postman đang dùng HTTP GET đến một máy chủ Postman Echo.
Postman cũng lưu trữ lịch sử của các lần gọi API để bạn có thể thực hiện lại nhanh chóng một cuộc gọi API. Postman cũng bao gồm các chức năng như tự động hoàn thành các HTTP headers và hỗ trợ hiển thị nhiều loại dữ liệu khác nhau như JSON, HTML và các loại dữ liệu nhiều thành phần.
Curl
Curl là một công cụ dòng lệnh có thể chạy trên bất kỳ nền tảng nào hay phần cứng nào. Với curl, chúng ta thường dùng các tùy chọn dòng lệnh sau:
-d: cho phép bạn truyền dữ liệu đến các server ở xa. Bạn có thể nhúng dữ liệu bên trong dòng lệnh hay truyền dữ liệu dùng một file.
-H: cho phép thêm một http header vào request.
-insecure: bỏ qua kiểm tra certificate.
-c: Lưu dữ liệu nhận được trên server. Có thể dùng lại các dữ liệu này với tùy chọn –b.
-b: Cho phép bạn truyền dữ liệu cookie data.
X: Cho phép chỉ ra phương thức HTTP method, mặc định là GET.
$ curl -sD - https://postman-echo.com/get?test=123
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Tue, 27 Aug 2019 04:59:34 GMT
ETag: W/"ca-42Kz98xXW2nwFREN74xZNS6JeJk"
Server: nginx
set-cookie:
sails.sid=s%3AxZUPHE3Ojk1yts3qrUFqTj_MzBQZZR5n.
NrjPkNm0WplJ7%2F%2BX9O7VU
TFpKHpJySLzBytRbnlzYCw; Path=/; HttpOnly
Vary: Accept-Encoding
Content-Length: 202
Connection: keep-alive
{"args":{"test":"123"},"headers":{"x-forwardedproto":"
https","host":"postmanecho.
com","accept":"*/*","useragent":"
curl/7.54.0","x-forwarded-
port":"443"},"url":"https://postmanecho.
com/get?test=123"}
Ví dụ dùng curl cho hàm POST
$ curl -sD - -X POST https://postmanecho.
com/post -H 'cache-control: no-cache'
-H 'content-type: text/plain' -d 'hello
DevNet'
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Date: Tue, 27 Aug 2019 05:16:58 GMT
ETag: W/"13a-0lMLfkxl7vDVWfb06pyVxdZlaug"
Server: nginx
set-cookie:
sails.sid=s%3AwiFXmSNJpzY0ONduxUCAE8IodwNg9Z2Y.
j%2BJ5%2BOmch8XEq8jO1vzH8
kjNBi8ecJij1rGT8D1nBhE; Path=/; HttpOnly
Vary: Accept-Encoding
Content-Length: 314
Connection: keep-alive
{"args":{},"data":"hello DevNet","files":
{},"form":{},"headers":{"x-forwardedproto":"
https","host":"postmanecho.
com","contentlength":"
12","accept":"*/*","ca
che-control":"no-cache","contenttype":"
text/plain","useragent":"
curl/7.54.0","xforwardedport":"
443"},"json":null,"url":"https://postman
-echo.com/post"}
5.12.3. HTTPie
HTTPie là một công cụ hiện đại, thân thiện với người dùng và hỗ trợ nhiều nền tảng, được viết bằng Python. Công cụ này được thiết kế để tương tác dòng lệnh với CLI một cách dễ dàng. HTTPie được dùng chủ yếu cho kiểm tra, debugging và tương tác với các web server, dịch vụ web và các RESTful API. HTTPie hỗ trợ JSON, cho phép dùng HTTPS, proxies và các cơ chế xác thực. Nó cũng hỗ trợ các forms và các file uploads.
Python Requests
Requests là một module của Python cho phép bạn gửi các HTTP requests. Nó là thư viện với nhiều khả năng như truyền các thông số trong URL, gửi các header đã tùy biến hay xác thực SSL. Thư viện request là một công cụ hữu ích để bạn bắt đầu lập trình với API. Trong ví dụ dưới đây, các bạn sẽ được minh họa cách dùng thư viện để gửi các HTTP requests bằng Python. Requests là một thư viện bên ngoài nên nó cần được cài đặt trước khi bạn có thể sử dụng.
$ pip3 install requests
Để thêm vào các HTTP headers đối với một hàm gọi API request, bạn có thể truyền chúng trong dạng cấu trúc dữ liệu tự điển của Python (Python dict) trong phần giá trị thông số của headers. Tương tự, bạn có thể gửi các cookies đến một máy chủ cũng bằng cách dùng kiểu dict.
Ví dụ bên dưới mô tả một đoạn Python scripts sử dụng thư viện request và thực thi một hàm gọi API request đến máy chủ Postman Echo.
import requests
url = "https://postman-echo.com/get"
querystring = {"test":"123"}
headers = {}
response = requests.request("GET", url,
headers=headers, params=querystring)
print(response.text)
Ví dụ dưới đây là một đoạn chương trình dùng Python và thư viện Requests. Chương trình sẽ gọi POST đến máy chủ Postman Echo. Chú ý trường headers có các thông tin như content type và một trường mới gọi là payload. Để trả lời cho requests chúng ta có thông điệp response. Mọi thứ trong thông điệp response có thể được phân tách, sau đó các hành động kế tiếp có thể được thực hiện. Ví dụ này chỉ đơn giản in các giá trị của một vài thuộc tính của thông điệp response.
import requests
url = "https://postman-echo.com/post"
payload = "hello DevNet"
headers = {'content-type': "text/plain"}
response = requests.request("POST", url,
data=payload, headers=headers)
print(response.text)
Ví dụ dưới đây là một đoạn Python script đơn giản dùng thư viện Requests và thực hiện gọi GET đến máy chủ Postman Echo server. Bạn sẽ nhận thấy một sự khác nhau so với ví dụ trước là vấn đề xác thực. Với thư viện requests, vấn đề xác thực thường được thực hiện với từ khóa “authorization”, cùng với các giá trị type và key.
import requests
url = "https://postman-echo.com/basic-auth"
headers = {
'authorization': "Basic
cG9zdG1hbjpwYXNzd29yZA=="
}
response = requests.request("GET", url,
headers=headers)
print(response.text)
Các công cụ Debugging cho REST API
Khi bạn bắt đầu làm việc với Restful API, bạn sẽ gặp một số lỗi. Bạn có thể dùng một vài kỹ thuật để xác định các khía cạnh của vấn đề. Restful API sử dụng vài cơ chế để chỉ ra kết quả của việc gọi REST và các lỗi xảy ra trong quá trình xử lý. Bạn có thể dùng các phương thức này để bắt đầu quá trình debug cho một ứng dụng REST. Thông thường các lỗi trả về là gợi ý lớn nhất mà chúng ta nhận được. Khi chúng ta đã có thông tin này, chúng ta có thể dùng các công cụ như Postman và curl để thực thi tác vụ gọi API đơn giản và có thể quan sát các header của thông điệp gửi và nhận. Thêm vào đó, các công cụ được xây dựng tích hợp vào trong trình duyệt cho phép bạn theo dõi các dấu vết traces và thực thi các kiểu debug khác. Phần lớn các trình duyệt có tích hợp các công cụ dành cho developers. Chẳng hạn như Safari’s Web Development Tools, Chrome’s DevTools, và Firefox’s Developer Tools. Các công cụ này mặc định được tích hợp với trình duyệt và cho phép bạn kiểm tra các cuộc gọi API một cách nhanh chóng. Cuối cùng, nếu bạn hoạch định việc xây dựng các môi trường test của riêng bạn hay dùng công cụ sandbox, bạn có thể dùng các công cụ như Simple JSON Server. Đây là một máy chủ chạy mã nguồn mở. Bạn có thể chép về và chạy trong môi trường của bạn để học về RESTful API.