Quay lại

Hướng Dẫn Thực Hành: Thiết Lập API Gateway Chuyên mục Devops    2025-08-18    2 Lượt xem    2 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Trong bài viết này, chúng ta sẽ thực hành tạo một API đơn giản trên API Gateway với đầy đủ các thành phần cốt lõi và cách kiểm tra chúng. Giả sử chúng ta có một API endpoint để xác thực email, có dạng /api/v1/authen/email-authen.


Bước 1: Thiết Lập Method Request

Method Request là nơi bạn định nghĩa các yêu cầu mà client có thể gửi tới API của bạn. Nó giống như một "bộ lọc" ban đầu để xác định cấu trúc của request.

Cấu hình chính:

  • Authorization: NONE

  • API Key Required: False

  • Request Validator: None

Các tham số yêu cầu (Request Parameters):

  • URL Query String Parameters:

    • app_type: Dùng để xác định loại ứng dụng (ví dụ: iOS, Android).

    • platform: Dùng để xác định nền tảng.

  • HTTP Request Headers:

    • Authorization: Header này sẽ được dùng để chứa token xác thực (ví dụ: Bearer Token).

Tác dụng của các tham số:

  • app_typeplatform: Giúp bạn phân biệt và xử lý logic backend tùy thuộc vào nguồn gốc của yêu cầu.

  • Authorization: Cho phép bạn nhận token từ client để thực hiện xác thực hoặc phân quyền ở các tầng sau.


Bước 2: Cấu Hình Integration Request

Integration Request là nơi bạn kết nối API Gateway với backend của mình. Đây là bước mà API Gateway thực sự gửi yêu cầu đến backend service.

Cấu hình chính:

  • Integration Type: Bạn có thể chọn giữa HTTP, AWS_PROXY (cho Lambda), hoặc MOCK. Trong ví dụ này, chúng ta sẽ dùng HTTP để kết nối đến một ALB.

  • Integration HTTP Method: Phải khớp với phương thức của Method Request (ví dụ: POST).

  • Endpoint URL: URL của backend service, ví dụ: https://<ALB_DNS>/api/v1/authen/email-authen.

Ánh xạ tham số (Parameter Mapping):

  • Mapping URL Query String Parameters: Bạn cần ánh xạ các tham số từ Method Request sang Integration Request để backend nhận được.

    • integration.request.querystring.app_type -> method.request.querystring.app_type

    • integration.request.querystring.platform -> method.request.querystring.platform

  • Mapping HTTP Headers:

    • integration.request.header.Authorization -> method.request.header.Authorization

Tác dụng của Parameter Mapping:

Mapping giúp API Gateway "dịch" các tham số từ client sang định dạng mà backend yêu cầu. Ví dụ, nó đảm bảo rằng giá trị của header Authorization trong request của client được chuyển đúng vào header Authorization của request gửi đến ALB.


Bước 3: Thiết Lập Integration Response

Integration Response xử lý phản hồi từ backend trước khi trả về client. Đây là nơi bạn cấu hình để xử lý các mã trạng thái (status code) và thêm các header cần thiết (đặc biệt là cho CORS).

Cấu hình chính:

  • HTTP status regex: Sử dụng biểu thức chính quy để khớp với các mã trạng thái từ backend.

    • 2\d{2}: Khớp với tất cả các mã trạng thái thành công (200-299).

    • 4\d{2}: Khớp với lỗi phía client (400-499).

    • 5\d{2}: Khớp với lỗi phía server (500-599).

  • Method Response Status Code: Mã trạng thái mà API Gateway sẽ trả về cho client. Ví dụ, nếu backend trả về 201, bạn có thể ánh xạ nó về 200 cho client.

  • Header Mappings: Ánh xạ các header từ backend sang response của client.

    • method.response.header.Access-Control-Allow-Origin: '*'

    • method.response.header.Access-Control-Allow-Headers: 'Content-Type,Authorization,X-Api-Key'

    • method.response.header.Access-Control-Allow-Methods: 'GET,POST,PUT,DELETE,OPTIONS'

Tác dụng của Header Mapping:

Các header Access-Control-* là cốt lõi để giải quyết lỗi CORS. Khi bạn thiết lập chúng ở đây, API Gateway sẽ tự động thêm các header này vào mọi phản hồi, cho phép trình duyệt của client nhận ra rằng API của bạn cho phép các yêu cầu từ các domain khác.


Bước 4: Cấu Hình Method Response

Method Response định nghĩa cấu trúc cuối cùng của phản hồi trả về client. Nó xác định các header và cấu trúc dữ liệu mà client nên mong đợi.

Cấu hình chính:

  • Response Status Code: Định nghĩa các mã trạng thái phản hồi (ví dụ: 200, 400, 500).

  • Response Headers: Liệt kê các header mà bạn đã ánh xạ trong Integration Response.

    • Access-Control-Allow-Origin

  • Response Body: Định nghĩa kiểu nội dung (content type) và mô hình dữ liệu (model) cho phản hồi, ví dụ: application/json với Empty model.

Tác dụng của Method Response:

Nó giúp "hợp thức hóa" phản hồi. Mặc dù các giá trị thực tế của header được đặt ở Integration Response, việc khai báo chúng ở đây là cần thiết để API Gateway biết phải chuẩn bị những gì.


Bước 5: Kiểm Thử và CLI

Đây là bước quan trọng để xác minh rằng API của bạn đã được cấu hình đúng. Bạn có thể sử dụng công cụ Test tích hợp trong console của API Gateway hoặc sử dụng các lệnh curlaws apigateway để kiểm tra.

Kiểm tra CORS Preflight (OPTIONS):

Lệnh này mô phỏng một yêu cầu preflight từ trình duyệt. Nó kiểm tra xem API của bạn có trả về các tiêu đề CORS cần thiết hay không.

curl -X OPTIONS -H "Origin: https://sample.com" -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: Content-Type" -v "https://dev-api/api/v1/authen/email-authen"
  • -X OPTIONS: Chỉ định phương thức HTTP.

  • -H "Origin: ...": Bắt chước header Origin của trình duyệt.

  • -v: Hiển thị chi tiết (verbose) của request và response, bao gồm các header.

Kết quả mong đợi: Bạn sẽ thấy các header Access-Control-* trong phần response, xác nhận rằng CORS đã được cấu hình thành công.


Sử dụng AWS CLI để kiểm tra cấu hình:

Bạn có thể dùng AWS CLI để xem chi tiết cấu hình của một phương thức cụ thể.

aws apigateway get-method --rest-api-id ynqv1k3cpe --resource-id x30u9h --http-method GET
  • --rest-api-id: ID của API Gateway của bạn.

  • --resource-id: ID của tài nguyên API (ví dụ: /api/v1/authen/email-authen).

  • --http-method: Phương thức cần xem (ví dụ: GET).

Tác dụng của CLI: Lệnh này giúp bạn xác nhận rằng các thiết lập về Method Request, Integration Request và Response đã được lưu trữ chính xác. Đây là công cụ không thể thiếu khi bạn cần tự động hóa hoặc gỡ lỗi.

Hãy bắt đầu thực hành và bạn sẽ thấy API Gateway không hề phức tạp như bạn nghĩ. Chúc bạn thành công! 🚀

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday