- Support Websocket
- Hỗ trợ API version (như v1, v2)
- Hỗ trợ nhiều ENV như dev, test, prod…
- Hỗ trợ Authenticaiton and authorization
- Hỗ trợ tạo API Key
- Import từ Swagger/OpenAPI
- Transform + Validate request/response
- Generate SDK + API Spec
- Cache API
Integrate Type
- MOCK: return response mà không cần call đến backend
- HTTP / AWS (Lambda & AWS Services):
- Phải config cả request/response
- Dùng mapping template để map data từ request/response
- AWS_PROXY (Lambda Proxy):
- Input request sẽ được gửi đến Lambda
- Không sử dụng mapping template
- HTTP_PROXY
- Không sử dụng mapping template
- Input request sẽ được gửi đến endpoint
- Có thể add Header nếu cần thiết
Mapping Template
- Modify request/response, query string, body
- Add header
- Sử dụng VTL (Velocity Template Language) để for, if…
- Xoá data thừa nếu cần
- Content Type phải là application/json hoặc application/xml

Note: Có thể chuyển đổi JSON qua lại với XML để sử dụng với SOAP
Endpoint Type
- Edge-Optimized (default): User truy cập thông qua CloudFront Edge location
- Regional: Không sử dụng CloudFront Edge trực tiếp, nhưng có thể kết hợp cùng CloudFront để có nhiều option hơn
- Private: Sử dụng ENI (Interface VPC Endpoint)
Security
- Authentication
- IAM Role (Khi dùng EC2, ECS… các service khác của AWS có thể dùng Role)
- Cognito (Mobile,Web…)
- Custom Authorizer (Lambda)
- Custom Domain HTTPS: Tích hợp cùng ACM
- SSL phải ở us-east-1 nếu sử dụng Edge-Optimized
- SSL phải cùng region nếu sử dụng Regional
- Phải setting CNAME/Alias
Deployment Stage
- Các thay đổi trên endpoint chỉ được phản ánh khi deploy lại
- Có thể tạo nhiều stage, naming khác nhau (dev, test, prod, v1, v2…)
- Mỗi stage có config parameter riêng
- Cache
- Throttling
- WAF
- Log/Tracing
- Stage có thể rollback

Stage Variable
- Giống biến môi trường cho API Gateway
- Sử dụng trong trường hợp cần thay đổi value config thường xuyên khác nhau
- Có thể sử dụng ở nhiều nơi
- Lambda function ARN
- HTTP Endpoint
- Parameter mapping template
- Use case
- Sử dụng trong http endpoint (/dev, /test, /v1, /v2…..)
- Sử dụng làm parameter cho Lambda function qua Mapping template (object “context”)
- Format: ${stageVariable.VariableName}
Canary Deployments
- Send % request tới các endpoint khác nhau để đánh giá, debug xem có vấn đề gì không rồi chuyển toàn bộ sang endpoint mới hoặc rollback nếu cần.
- Có setting Stage variable và Cache cho Canary
- Khi deploy đến 1 Stage có Canary, bản chất chỉ deploy đến Canary. Sau khi test xong không có vấn đề gì, cần Promote Canary để deploy lên Stage chính
- Update Stage chính từ Canary
- Update Stage Variable sang Stage chính
- Set Canary Percentage về 0%

Request validation
- Max 400 error gửi lại cho client 1 request
- Check URI, query string, header
- Có thể config json Schema để validate request payload
- Setup validation bằng cách import file OpenAPI definition
Catching
- Default 300s, min 0s, max 3600s
- Define theo Stage, mỗi stage 1 setting cache riêng
- Có thể override setting cho method bất kỳ
- Capacity từ 0.5GB – 237GB
- Khi cần invalid cache thì có thể thực hiện từ console, hoặc set Cache- Control: max-age=0, với điều kiện có IAM authorization phù hợp khi setting, hoặc có thể không cần authen, nhưng không recommend
Usage Plan + API Key
- Usage Plan
- Ai có thể access các API đã deploy
- Config Rate Limit
- Sử dụng API key để xác định client nào đang sử dụng
- Config throttling limtit và quota limit
- API Key:
- alphanumeric string
- Có thể sử dụng cùng Usage plan
- Có thể config throttling limit, quota limit
Monitoring, Logging and Tracing
- Log
- Log request/response body
- Define trong mỗi stage (ERROR, DEBUG, INFO)
- Có thể override setting cho mỗi API
- Metric
- Define theo stage
- Có thể enable detailed metric
- Metric hữu dụng khi enable cache: CacheHitCount & CacheMissCount
- IntegrationLatency: Thời gian backend response tới API Gateway
- Latency: thời gian từ lúc API nhận request tới response cho client
- 4XXError + 5XXError
- Tích hợp cùng X-Ray
Throttling
- Max 10.000 request/s, có thể request tăng
- Error 429 nếu vượt quá
- Nên set Stage limit & Method limit để giới hạn
CORS
- Khi sử dụng cùng proxy, cần set các header liên quan tới CORS ở backend
- Khi không sử dụng proxy, các header sẽ được lấy từ setting API Gateway
Authentication and Authorization
- IAM (Identity base Policy hoặc Resource base Policy của API Gateway)
- Tạo Policy và attach to User/Role
- User/Role gửi “Sig V4” trong header tới API Gateway
- API Gateway check và xử lý tiếp request
- Cognito
- Không cần implement gì thêm
- Lambda Authorizer
- Sử dụng Lambda để custom authorizer
- VD như JWT, Oauth, connect với bên thứ 3…
- Sử dụng header, query string để gửi thông tin tới function
- Lambda phải return IAM Policy để authen, kết quả sẽ được cache (recommend)


REST API vs HTTP API

HTTP API
- Không sử dụng data mapping
- Support OIDC, OAuth2, support CORS
- Không có Usage Plan và API Key
REST API
Tất cả các tính năng trên trừ OIDC, OAuth2
WebSocket
- Connection URL
- POST: Gửi message tới client
- GET: Lấy thông tin connection status
- DELETE: disconnect client
- Routing
- Mỗi action trên socket sẽ được handle bởi backend tương ứng bằng route
- Sử dụng route selection để chọn target backend, VD: $request.body.action (“action” là attribute trong body)
- Nếu không có route nào được chỉ định thì send tới $default

