API (Application Program Interfaces) là một tập hợp các quy tắc, giao thức và công cụ xác định cách các thành phần ứng dụng tương tác lẫn nhau. Giao thức này mở rộng đến cách mà ứng dụng sẽ hoạt động khi nó nhận được thông tin bên ngoài. Liệu đây có phải là ứng dụng để lưu trữ thông tin? Có phải là thông tin bổ sung được trả về để phản hồi yêu cầu bên ngoài hay không? Những điều như vậy cần được xem xét khi tạo hoặc sử dụng API trong các chương trình của bạn.

Vậy nên, khả năng vừa sử dụng vừa tạo API sẽ phản ánh độ dày kinh nghiệm của một lập trình viên, đồng thời còn là chìa khóa để học ngôn ngữ lập trình mới, như là học cú pháp, nguyên tắc cơ bản và quy ước. Với PHP, điều này cũng không ngoại lệ; chẳng hạn, mặc dù bạn có thể sử dụng JavaScript để xử lý yêu cầu của mình, nhưng đó là một trải nghiệm học tập đáng có để tìm hiểu cách tự xử lý việc chuyển dữ liệu từ đầu vào biểu mẫu (form inputs) sang yêu cầu bên ngoài trong PHP.

Để bắt đầu, cách cốt yếu của PHP nhằm truy cập thông tin của trang web bên ngoài hoặc thực hiện các yêu cầu API là thông qua yêu cầu cURL. cURL (hay còn gọi là Client URL) là một công cụ dòng lệnh (command-line) để thực hiện các yêu cầu bên ngoài với các giao thức khác nhau, bao gồm HTTP và HTTPS, đó là những gì bạn sẽ sử dụng để vấn tin (request) dữ liệu của mình.

Có một dự án mà bạn sẽ đưa ra yêu cầu cho các API “xịn sò” có tên IGDB - là một trang web tập trung vào trò chơi điện tử; API này sẽ cung cấp quyền truy cập vào dữ liệu trò chơi bao gồm nhân vật, mô tả, đồ họa... Bạn sẽ cần lấy khóa bảo mật từ trang web, vì vậy hãy đảm bảo tạo tài khoản và làm theo các bước để nhận khóa.

Tiếp theo, trước tiên, bạn cần hiểu cách mà trang web muốn bạn trao đổi thông tin với nó. Trong tài liệu của IGDB, họ liệt kê điểm cuối bắt buộc và các thông số để lấy thông tin từ trang web. Ví dụ như bạn muốn có khả năng tìm kiếm dữ liệu về các nhân vật yêu thích ở trong trò chơi điện tử này, vì vậy điểm cuối mà bạn sẽ tập trung vào sẽ là “https://api-v3.igdb.com/characters". Với suy nghĩ này, hãy cùng tiến tới code:

Đây là tất cả mã cần thiết để nhận dữ liệu mà bạn muốn từ API IGDB hiện tại. Trong đây có rất nhiều code, cùng khám phá từng phần nào:

Lúc đầu, bạn phải xác định API chính mà bạn có được từ trang web cơ sở dữ liệu. Đừng làm API của bạn hiển thị rõ ràng trong code hoặc có thể truy cập được từ trang web của bạn. Bởi vì, bạn cần giữ nó ở một nơi an toàn bên ngoài tệp mà bạn đang phân phối trong thư mục của mình. Một chỗ cất giữ tốt đó là ngay bên ngoài thư mục chứa tất cả các tệp PHP của bạn. Ngay sau đó, bạn liệt kê ra những gì IGDB muốn bạn truy vấn về nhân vật. Sang bước tiếp theo:

Tại đây, bạn sẽ tạo một biến tìm kiếm chứa tên của người thợ sửa ống nước được ưa chuộng, Mario! Tiếp theo, bạn gọi curl_init để tạo bối cảnh phiên (session context) cURL và chuyển vào URL. Đây là một trường hợp kết nối để lấy dữ liệu. curl_init trả về bối cảnh phiên mà bạn sẽ cần để hoàn thành nhiệm vụ của mình, vì vậy bạn sẽ lưu kết quả của init vào biến $ch.

 

Tổng hợp việc làm PHP nổi bật tại vietnamworks

Để phiên biết bạn muốn gì, bạn phải chuyển một số tùy chọn vào phiên. Hàm curl_setopt sẽ thực hiện được điều này. curl_setopt lấy bối cảnh phiên (trong trường hợp này là $ch), tên của tùy chọn mà bạn muốn thay đổi hoặc chỉnh sửa trong phiên, và giá trị để cung cấp tùy chọn đó. Có một danh sách lớn các tùy chọn, đã được sử dụng trong tài liệu PHP cho cURL và bạn nên lướt qua chúng, ít nhất là để xem những tùy chọn khác mà bạn có thể muốn đưa vào các dự án trong tương lai.

Trong trường hợp này, bạn sẽ sử dụng hàm curl_setopt_array vì nó cho phép bạn chuyển đồng thời tất cả các tùy chọn của mình vào yêu cầu trong một mảng. Bạn có thể liệt kê loại yêu cầu là yêu cầu “POST” vì bạn sẽ gửi dữ liệu và đặt hai tùy chọn, đó là POSTFIELDSHTTPHEADER. HTTPHEADER là nơi bạn cung cấp các tiêu đề của mình. Tiêu đề phải được chuyển theo định dạng được hiển thị ở trên - một mảng với các cặp giá trị key (key-value) được phân tách bằng dấu hai chấm. Vậy là bạn đã chuyển khóa API của mình dưới dạng “user-key” và thông số “Accept”. Điều đó cho biết loại dữ liệu sẽ được gửi lại, trong trường hợp này là JSON.

POSTFIELDS là một cách khác để gửi các tùy chọn đến API. Trong trường hợp này, bạn yêu cầu API tìm kiếm giá trị của biến $data của bạn, để trả lại tên, giới tính, mô tả và loài của Mario, đồng thời giới hạn số lượng kết quả đến còn một. Chỉ có một Mario.

Cuối cùng, để gửi yêu cầu của bạn, bạn phải gọi curl_exec trên phiên thực thể (session instance) của bạn. Thao tác này sẽ gửi yêu cầu của bạn đến API và đưa dữ liệu trở lại và trả về. Bạn lưu dữ liệu trả về dưới dạng res. Ngoài ra, bạn nên đặt một biến $err làm lệnh gọi curl_error trên ngữ cảnh của bạn một lần nữa để phát hiện bất kỳ lỗi nào xuất hiện trở lại từ lệnh gọi máy chủ. Nếu có lỗi trong cú pháp của bạn hoặc có điều gì đó xảy ra với API, hàm sẽ bắt lỗi và trả về để bạn có thể xem và sửa lỗi của mình.

Sau khi hoàn tất, bạn có thể xem kết quả tìm kiếm của mình bằng cách lặp lại chúng tới trang!

Ở đây, bạn thấy lỗi của bạn trong quá trình in hoặc thấy kết quả tìm kiếm của bạn. Và với tìm kiếm hiện tại về “Mario”, đây là những gì bạn nhận lại được!

Đây là những điều cơ bản về yêu cầu cURL trong PHP. Có nhiều tùy chọn khác có thể được thao tác hoặc thông qua và các API khác nhau sẽ bắt buộc các cách khác nhau trong việc yêu cầu dữ liệu, vì vậy việc bạn nên làm là đọc tài liệu, kiểm tra và đặt câu hỏi. Tải xuống và sử dụng Postman như một trợ thủ đắc lực trong việc hiểu các định dạng tìm kiếm của bạn nên ở dạng nào và nó trông như thế nào ở các ngôn ngữ khác.

Tổng hợp việc làm IT - Software trên VietnamWorks
VietnamWorks InTECH
Theo Miguel Peter