HIểu về API Gateway và các thành phần cốt lõi Chuyên mục Devops 2025-08-18 0 Lượt xem 0 Lượt thích 0 Bình luận
Chào mừng các bạn đến với một chủ đề cốt lõi trong phát triển web hiện đại: Amazon API Gateway. Nếu bạn đang xây dựng các dịch vụ microservices, ứng dụng web, hay mobile, việc nắm vững API Gateway là chìa khóa để tạo ra những hệ thống mạnh mẽ, an toàn và dễ quản lý.
Trong bài viết này, chúng ta sẽ đi sâu vào 5 thành phần quan trọng nhất của API Gateway và cách giải quyết một trong những vấn đề phổ biến nhất: lỗi CORS.
API Gateway: Cánh cổng an toàn và thông minh của bạn
Hãy hình dung API Gateway như một "nhân viên lễ tân" chuyên nghiệp đứng trước tất cả các dịch vụ backend của bạn. Mỗi khi một yêu cầu (request) từ bên ngoài muốn truy cập vào hệ thống, nó sẽ đi qua "lễ tân" này trước. Điều này mang lại nhiều lợi ích to lớn:
-
Quản lý tập trung: Thay vì phải quản lý từng API riêng lẻ, bạn có thể quản lý tất cả tại một nơi duy nhất.
-
Bảo mật: API Gateway có thể xác thực, phân quyền và giới hạn tốc độ truy cập (rate limiting), bảo vệ backend của bạn khỏi các cuộc tấn công.
-
Giám sát: Nó cung cấp các công cụ ghi log, theo dõi hiệu suất và tìm lỗi, giúp bạn dễ dàng theo dõi tình trạng của hệ thống.
-
Tương thích: Nó có thể biến đổi các yêu cầu và phản hồi, đảm bảo chúng luôn tương thích với backend, dù client gửi request với định dạng nào.
5 thành phần cốt lõi của API Gateway
Để tạo ra một API hoàn chỉnh trên API Gateway, bạn cần nắm vững 5 thành phần sau:
1. Method Request - Cổng vào của API
Đây là bước đầu tiên khi một request đến API Gateway. Method Request định nghĩa cách client tương tác với API của bạn. Tại đây, bạn sẽ xác định:
-
Phương thức HTTP (ví dụ:
POST
,GET
). -
Loại xác thực (
authorizationType
). -
Các tham số cần thiết từ header, đường dẫn (
path parameters
) hoặc chuỗi truy vấn (query parameters
). -
Quan trọng nhất: bạn có thể cấu hình validation để kiểm tra tính hợp lệ của dữ liệu đầu vào ngay tại đây, giúp loại bỏ các request không hợp lệ trước khi chúng đến backend.
2. Integration Request - Cầu nối đến Backend
Sau khi một request được chấp nhận, Integration Request sẽ là cầu nối đưa nó đến backend của bạn. Có ba loại tích hợp phổ biến:
-
HTTP Integration: Phổ biến nhất, chuyển tiếp request đến một endpoint HTTP/HTTPS (như một server, Load Balancer, hoặc một API khác).
-
Lambda Integration: Dùng để kích hoạt một hàm AWS Lambda, rất phù hợp cho kiến trúc serverless.
-
MOCK Integration: Trả về phản hồi giả lập trực tiếp từ API Gateway mà không cần gửi đến backend. Loại này đặc biệt hữu ích cho việc xử lý CORS, như chúng ta sẽ tìm hiểu bên dưới.
Tại đây, bạn cũng có thể "ánh xạ" (mapping) các tham số từ Method Request sang Integration Request để backend nhận được dữ liệu theo đúng định dạng mong muốn.
3. Integration Response - Xử lý phản hồi từ Backend
Đây là thành phần xử lý phản hồi từ backend. Nó đóng vai trò như một "phiên dịch viên", dịch kết quả từ backend thành một định dạng phù hợp trước khi gửi đến client.
-
Response Mapping: Bạn có thể định nghĩa cách API Gateway ánh xạ các mã trạng thái (
status code
) từ backend (ví dụ:200
,400
,500
) thành mã trạng thái của API. -
Error Handling: Bạn có thể cấu hình các mẫu (
selectionPattern
) để xử lý các loại lỗi khác nhau một cách linh hoạt.
4. Method Response - Định nghĩa Response Schema
Method Response định nghĩa cấu trúc cuối cùng của phản hồi mà client sẽ nhận được. Bạn có thể định nghĩa các header sẽ có trong response (ví dụ: Access-Control-Allow-Origin
cho CORS) và cả cấu trúc dữ liệu (responseModels
) để đảm bảo tính nhất quán.
5. Test - Đảm bảo API hoạt động đúng
API Gateway cung cấp một công cụ kiểm thử tích hợp rất hữu ích. Bạn nên tạo các trường hợp kiểm thử để:
-
Kiểm tra validation của Method Request.
-
Xác minh các tham số đường dẫn và chuỗi truy vấn.
-
Đặc biệt, kiểm thử CORS preflight bằng cách sử dụng
curl -X OPTIONS
để đảm bảo API của bạn đã được cấu hình đúng.
Giải quyết vấn đề CORS - Cơn đau đầu của mọi Developer
CORS (Cross-Origin Resource Sharing) là một cơ chế bảo mật của trình duyệt, ngăn chặn các yêu cầu HTTP từ một tên miền (domain) này đến một tên miền khác. Ví dụ, nếu ứng dụng của bạn chạy ở myapp.com
và gọi API tại api.myapp.com
, trình duyệt sẽ gửi một yêu cầu đặc biệt gọi là preflight request (OPTIONS
) trước để kiểm tra. Nếu API không được cấu hình để trả về các header CORS phù hợp, yêu cầu chính sẽ bị chặn.
Giải pháp hiệu quả trên API Gateway
Để xử lý CORS, bạn cần làm hai việc chính:
-
Thêm phương thức
OPTIONS
cho mọi tài nguyên (Resource): Đây là yêu cầu preflight. Bạn cần thêm một phương thứcOPTIONS
cho mỗi API endpoint của mình. -
Cấu hình các Header CORS: Đảm bảo rằng phương thức
OPTIONS
và các phương thức chính (GET
,POST
, v.v.) trả về các header sau trong phản hồi:-
Access-Control-Allow-Origin
: Chỉ định tên miền nào được phép truy cập. Sử dụng'*'
để cho phép tất cả. -
Access-Control-Allow-Methods
: Liệt kê các phương thức HTTP được phép. -
Access-Control-Allow-Headers
: Liệt kê các header được phép trong yêu cầu.
-
HTTP
Integration vs. MOCK
Integration cho CORS
-
HTTP Integration: Đây là lựa chọn được khuyến khích vì nó nhất quán. API Gateway sẽ chuyển tiếp yêu cầu
OPTIONS
đến backend, và backend sẽ xử lý logic CORS. Điều này giúp bạn quản lý logic CORS tập trung tại một nơi. Mặc dù có thêm một chút độ trễ, nhưng nó mang lại tính nhất quán và dễ gỡ lỗi hơn. -
MOCK Integration: Đây là một lựa chọn nhanh hơn. API Gateway tự trả lời yêu cầu
OPTIONS
mà không cần đến backend. Tuy nhiên, nó yêu cầu bạn phải cấu hình CORS tĩnh tại API Gateway và có thể khó bảo trì hơn khi số lượng API tăng lên.
URL: Enabling CORS for a non-simple request
Test: Test CORS for an API Gateway API
Mẹo quan trọng: Đảm bảo Path Parameters được ánh xạ đúng
Khi thêm phương thức OPTIONS
cho các API có tham số đường dẫn (ví dụ: /users/{user_id}
), hãy nhớ rằng OPTIONS
cũng cần ánh xạ tham số này. Nếu không, yêu cầu preflight sẽ bị lỗi.
Kết luận
API Gateway là một công cụ cực kỳ mạnh mẽ. Việc hiểu rõ cách các thành phần hoạt động cùng nhau và biết cách xử lý CORS đúng cách sẽ giúp bạn xây dựng và duy trì các hệ thống APIs linh hoạt, bảo mật và hiệu quả. Hãy nhớ, luôn luôn tự động hóa quá trình cấu hình CORS bằng script để tiết kiệm thời gian và tránh sai sót.
Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại để lại bình luận nhé! Happy coding!
Bình luận (0)