Sau buổi offline với club Testingvn về chủ đề API testing với Jmeter, mình rất có hứng thú với chủ đề này, nhưng lại chưa có nhiều kinh nghiệm sử dụng Jmeter và mình quen dùng Postman hơn (dễ cài dặt, giao diện dễ nhìn và cũng mạnh mẽ không thua kém là mấy). Chủ đề này mình sẽ cố gắng viết ngắn gọn khoảng 2-3 bài để không bị kéo dài lan man, còn tất nhiên là có kết thúc được hay không thì không biết. :))))))
Nội dung bài viết
I.API là gì? Vì sao phải test API?
1. Nói trên phương diện mô hình Client – Server
API là cái cầu nối giữa client và server. Client ở đây có thể là máy tính, điện thoại sử dụng hệ điều hành khác nhau và được viết bằng những ngôn ngữ khác nhau. Tương tự, server back-end cũng được viết bằng các ngôn ngữ khác nhau. Để 2 thằng này có thể nói chuyện được với nhau chúng phải nói cùng 1 ngôn ngữ. Ngôn ngữ ấy chính là API.
Chúng ta hãy lấy một ví dụ đơn giản cho vấn đề này :
Giả sử bạn là 1 người hướng dẫn viên du lịch, và quản lý 1 nhóm du lịch hợp chủng quốc. Trong nhóm có người Nga, Mỹ, Nhật, Thụy Điển, Đức, Pháp, Việt Nam. Để có thể làm mọi việc một cách suôn sẻ, tất cả cái nhóm này phải cùng nói 1 ngôn ngữ, có thể là tiếng anh hoặc tiếng Việt. Ở đây người hướng dẫn viên sẽ đóng vai trò là Server, người du lịch sẽ đóng vai trò là client.
Khi đi trên đường hoặc đến thăm địa danh du lịch, những người khách có thể hỏi hướng dẫn viên “Cái kia là gì ?”, “Ăn quả này như thế nào?”.. Với mỗi một hành động hỏi như vậy, tương ứng với việc gửi 1 request lên server với những tham số đầu vào như “Cái kia” hay “quả này”. (Gửi request còn được gọi là Call API). Với mỗi câu hỏi, người hướng dẫn viên sẽ trả lời 1 cách khác nhau – cái này gọi là response. “Cái đó là cái để đập vào đầu những đứa nào hỏi nhiều”, “Quả này cứ cho vào mồm là xong”. :)))
2. Nói trên phương diện tổng quát:
API là cầu nối giữa 2 đối tượng (Object).
Ví dụ, trong cuộc sống thực tế, bạn có 1 cái case máy tính và 1 màn hình. 2 cái đó muốn kết nối với nhau thì bắt buộc phải thông qua 1 dây nối với 2 đầu tiếp xúc. Hai cái đầu tiếp xúc đó chính là API. Điểm tiếp xúc đó là cố định, nếu 1 màn hình khác muốn sử dụng thì cũng phải có đầu tiếp giống như thế, nếu không là không kết nối được.
Khi bạn làm việc, thường sẽ gặp trường hợp tích hợp với service của bên thứ 3, có khi 1 app phải tích hợp với rất nhiều bên. Để các bên có thể chia sẻ dữ liệu qua lại lẫn nhau thì chỉ có cách là tạo ra các public API để bên khác có thể kết nối vào.
Ví dụ cụ thể:
Trang web thương mại điện tử X có tích hợp với 1 cổng thanh toán Y (Payment gateway)
- Người dùng nhập thông tin thẻ tín dụng
- X sử dụng (thông tin thẻ + số tiền phải thanh toán) gọi 1 API của Y
- Y trả lại thông tin về việc thanh toán có thành công hay ko?
- X lấy thông tin đó, hiển thị lên cho người dùng biết họ đã thanh toán thành công chưa.
Định dạng trong việc hỏi và trả lời ở trên có thể thông qua trò chuyện trực tiếp hoặc viết giấy. Ở trong API thì có 2 định dạng chính là xml và json. Hiện tại, mình chỉ có kinh nghiệm với json nên chỉ giới thiệu và lấy ví dụ ở những bài sau bằng json thôi.
II. Vì sao phải test API?
- Trong quá trình triển khai dự án, phần server và client làm độc lập với nhau nên có nhiều chỗ client chưa làm xong, mình không thể chờ client làm xong để test được dữ liệu mà test API bằng công cụ khác luôn –> Lúc này việc test hoàn toàn không phụ thuộc gì vào client.
- Kể cả khi client làm xong rồi, nếu mình test trên client mà thấy lỗi liên quan đến logic và dữ liệu thì cũng cần test thêm cả API để biết chính xác là server sai hay client sai –> fix lỗi sẽ nhanh hơn.
- Khi làm hệ thống web services, dự án của mình chỉ viết API cho bên khác dùng, mình sẽ không có client để test giống như các dự án khác –> phải test API hoàn toàn.
[…] lại kiến thức 1 chút: API chỉ là cầu nối nói chuyện giữa Client và Server. API không thực hiện 1 business […]
Mình có thắc mắc muốn hỏi:
Mình được bên A cấp API. Mình có thể tạo ra hệ thống, hay web để có thể cho nhiều người khác xem kết quả của API của mình được không
A cấp API cho B
B tạo mã cho C, D, E
C, D, E đăng nhập vào xem kết quả của C, D, E theo mã cá nhân của họ
Hi bạn, phần này thì ngoài khuôn khổ của API test.
Chia sẻ với theo ý hiểu của mình thôi: cái bạn nói hoàn toàn có thể làm được và rất nhiều dịch vụ vẫn đang làm như vậy. Mình lấy ví dụ: Bên booking.com bán API cho các đối tác, các đối tác này cũng có thể mua thêm API ở 1 bên khác, ví dụ agoda.com. Họ tạo ra web và cho nhiều user (chủ khách sạn) có thể tiếp cận được thông tin này.
–> Mình tóm tắt lại: A, B bán API cho C. C tạo ra web, cho phép D,E,F xem kết quả API mà C mua.
P/s: đấy là ví dụ, hoạt động trên có thể ko có thật. 😀
hihi. chào đại ca Giang
nhớ em không ^^.
Hi bạn, mình ko nhớ 😀
công ti mình chuẩn bị mở 1 sàn giao dịch tiền ảo và muốn làm 1 API thông qua 1 ngân hàng ở VN, nhưng mình vẫn k hiểu vai trò của API này giữa ngân hàng với sàn này lắm, có thể giải thích cho mình được không ạ?
Hi bạn, phải xem business flow của app thì mới biết được mục đích của nó là gì. Nhưng 2 hệ thống thường làm API để nói chuyện với nhau vì:
– Hệ thống 2 ko có khả năng chọc trực tiếp vào code của hệ thống 1, nhưng hệ thống 2 muốn thực hiện 1 số action của hệ thống 1. Do đó, hệ thống 1 public một số API để hệ thống 2 có thể thực hiện được những action đó. Ví dụ, mua hàng ở lazada, người dùng chỉ cần thao tác ở trang mua hàng lazada là có thể đặt được hàng và thanh toán được. Flow có thể sẽ là: Lazada –(api)–> Payment Gateway –(API)–> Bank.
– Hệ thống 1 không muốn cho hệ thống 2 biết hệ thống 1 chạy như thế nào, chỉ muốn cho hệ thống 2 biết 1 số chức năng hệ thống 1 thông qua các public API.
Trong 1 vài dòng comment ko nói hết được ý, nếu bạn vẫn chưa hiểu thì add skype mình nhé.
Loạt bài viết này của anh thật sự rất dễ hiểu và bám sát với sử dụng thực tế trong testing. Cám ơn anh Giang rất nhiều! 🙂
Cảm ơn em đã động viên 😀 Hi vọng em tìm được thứ gì có ích với em trong blog của anh.
Cảm ơn anh đã chia sẻ kiến thức. Các bài viết rất bổ ích. Mong a có thêm nhiều bài viết nữa ạ!!
thanks em. 😀
[…] Docker được xây dựng theo cấu trúc client-server, giao tiếp với nhau thông qua Restful API. […]
Cám ơn Giang đã chia sẽ bài viết
You’re welcome
Mình đang viết test case API cho 1 app, nhưng bên dev chỉ gửi file Json về app đó. Mình mở lên nhưng đọc không hiểu trong file Json đó để viết phần cho phần expected result như thế nào? Help mình với
Mình cần thông tin cụ thể hơn, bạn có thể liên lạc qua skype với mình. Địa chỉ skype ở page About Me
bài viết rất hay thích hợp cho những newbie
Thanks!
Mình bắt đầu tìm hiểu về API. Đọc bài của bạn dễ hiểu quá. Cảm ơn Giang.
Cảm ơn bạn!
Anh ơi, cho e hỏi, ví dụ test Api Login, thì client là FE, server là BE đúng k ạ? Call api trả về lỗi 4xx thì là lỗi FE, 5xx thì là BE. Hiểu như vậy có đúng k ạ
Hi em, các mã lỗi đều do server trả về, nó có ý nghĩa như sau:
– 4xx: server báo rằng đây là lỗi của client và sẽ đưa ra error message để client biết lỗi nào, từ đó gửi thông tin lên cho đúng.
– 5xx: là lỗi server, ám chỉ rằng server đã nhận được thông tin của client và các thông tin của client đã đi qua phần validation (nên ko bị lỗi 4xx), tuy nhiên server gặp khó khăn trong việc xử lý request này. Trường hợp hi hữu nhưng lại hay gặp, phần validation BE dev code hơi ẩu nên check thiếu trường hợp –> client gửi thông tin lên sai, server xử lý request này thì bị exception –> bắn ra lỗi 500. Thực tế phải trả lại lỗi 4xx.
Ui câu trả lời rất dễ hiểu ạ