Tóm tắt
Swagger Petstore vi phạm các nguyên tắc REST cơ bản: nó sử dụng tên tài nguyên số ít không nhất quán, bao gồm động từ hành động trong URL, trả về mã trạng thái HTTP sai, hiển thị mật khẩu trong các yêu cầu GET và trả về các mảng trần mà không có siêu dữ liệu. Modern PetstoreAPI khắc phục tất cả các vấn đề này với thiết kế RESTful phù hợp, xử lý lỗi RFC 9457 và các mẫu sẵn sàng cho sản xuất.
Giới thiệu
Trong hơn một thập kỷ, Swagger Petstore đã là ví dụ mặc định để học OpenAPI. Hàng triệu nhà phát triển đã nghiên cứu nó, sao chép các mẫu của nó và xây dựng các API sản xuất dựa trên thiết kế của nó. Có một vấn đề: nó dạy bạn cách xây dựng các API tồi.
Swagger Petstore vi phạm các nguyên tắc REST cơ bản, bao gồm các lỗ hổng bảo mật và minh họa các anti-pattern gây hại cho hệ thống sản xuất. Nó giống như học lái xe với một chiếc xe có bàn đạp phanh và ga bị hoán đổi—bạn sẽ học được, nhưng bạn sẽ học sai.
Thiệt hại là có thật. Các nhà phát triển đã học từ Swagger Petstore mang những anti-pattern này vào mã sản xuất. Các API được xây dựng với cách đặt tên không nhất quán, phương thức HTTP sai và các lỗ hổng bảo mật. Các bài đánh giá mã bỏ qua những vấn đề này vì "Swagger làm thế đấy."
Trong hướng dẫn này, bạn sẽ tìm hiểu chính xác những gì sai với Swagger Petstore, tại sao những vấn đề này lại quan trọng và cách Modern PetstoreAPI khắc phục chúng bằng các mẫu sẵn sàng cho sản xuất. Bạn sẽ thấy các so sánh song song, hiểu tác động của từng vi phạm và khám phá cách kiểm thử API của mình đúng cách với Apidog.
Vấn đề kế thừa của Swagger Petstore
Swagger Petstore được tạo ra vào năm 2011 như một ví dụ đơn giản cho đặc tả Swagger (nay là OpenAPI). Nó phục vụ mục đích của mình: trình bày cách viết một đặc tả OpenAPI. Nhưng nó chưa bao giờ được coi là một tài liệu tham khảo cho thiết kế API REST.
Tại sao nó trở thành tiêu chuẩn trên thực tế
Khi các nhà phát triển học OpenAPI, họ bắt đầu với ví dụ chính thức. Swagger Petstore chính là ví dụ đó. Nó có trong tài liệu, hướng dẫn và trình tạo mã. Nếu bạn đã sử dụng Swagger UI hoặc Swagger Codegen, bạn đã thấy nó.
Vấn đề: các nhà phát triển cho rằng "ví dụ chính thức = thực hành tốt nhất." Họ sao chép các mẫu mà không đặt câu hỏi. Các khóa học thiết kế API sử dụng nó làm công cụ giảng dạy. Các công ty xây dựng API nội bộ theo cấu trúc của nó.
Chi phí của những ví dụ tồi
Những ví dụ tồi tích tụ theo thời gian:
- Các nhà phát triển mới học anti-pattern - Họ không biết đây là những lỗi sai
- Trình tạo mã làm trầm trọng thêm các vấn đề - Các SDK được tạo ra kế thừa các lỗi
- Công cụ tài liệu hiển thị các ví dụ tồi - Swagger UI hiển thị Petstore theo mặc định
- Các công ty xây dựng API sản xuất theo cách này - "Nếu nó đủ tốt cho Swagger..."
Swagger Petstore có lẽ đã ảnh hưởng đến nhiều thiết kế API hơn bất kỳ ví dụ nào khác trong lịch sử. Đó là lý do tại sao những lỗi của nó lại quan trọng.
Các vi phạm REST nghiêm trọng trong Swagger Petstore
Hãy cùng xem xét các vi phạm REST cụ thể trong Swagger Petstore và lý do tại sao chúng sai.
1. Đặt tên tài nguyên không nhất quán (số nhiều so với số ít)
Vi phạm:
GET /pet/{petId} ← Số ít
GET /store/inventory ← Số nhiều
POST /pet ← Số ít
GET /user/{username} ← Số ít
Tại sao sai:
Tài nguyên REST đại diện cho các bộ sưu tập. Một bộ sưu tập là số nhiều. Khi bạn truy cập /pets, bạn đang truy cập bộ sưu tập thú cưng. Khi bạn truy cập /pets/123, bạn đang truy cập mục 123 trong bộ sưu tập thú cưng.
Việc trộn số ít và số nhiều làm hỏng mô hình tư duy này. /pet/123 đang truy cập bộ sưu tập thú cưng hay một tài nguyên thú cưng duy nhất? Sự không nhất quán tạo ra sự nhầm lẫn.
Khắc phục bằng Modern PetstoreAPI:
GET /pets/{petId} ← Luôn là số nhiều
GET /stores/inventory ← Nhất quán
POST /pets ← Số nhiều cho bộ sưu tập
GET /users/{username} ← Số nhiều ở mọi nơi
Modern PetstoreAPI sử dụng tên tài nguyên số nhiều một cách nhất quán trên tất cả các điểm cuối. Kiểm tra tài liệu API REST để biết cấu trúc điểm cuối hoàn chỉnh.
2. Động từ hành động trong URL
Vi phạm:
GET /pet/findByStatus?status=available
GET /pet/findByTags?tags=tag1,tag2
GET /user/login?username=john&password=secret
GET /user/logout
Tại sao sai:
URL REST nên đại diện cho tài nguyên (danh từ), không phải hành động (động từ). Phương thức HTTP là động từ. GET /pets có nghĩa là "lấy tài nguyên thú cưng". Việc thêm findByStatus là dư thừa—đó là chức năng của các tham số truy vấn.
Các động từ hành động trong URL cho thấy bạn đang nghĩ theo thuật ngữ RPC (Remote Procedure Call), chứ không phải thuật ngữ REST. Bạn đang tiết lộ chi tiết triển khai thay vì tài nguyên.
Khắc phục bằng Modern PetstoreAPI:
GET /pets?status=AVAILABLE ← Tài nguyên + bộ lọc
GET /pets?tags=tag1,tag2 ← Tham số truy vấn để lọc
POST /auth/login ← Tài nguyên xác thực riêng biệt
POST /auth/logout ← Điểm cuối xác thực RESTful
Modern PetstoreAPI sử dụng các tham số truy vấn để lọc và các tài nguyên xác thực riêng biệt. Xem hướng dẫn xác thực để biết các mẫu xác thực phù hợp.
3. Mã trạng thái HTTP sai
Vi phạm:
POST /pet
Response: 200 OK ← Nên là 201 Created
DELETE /pet/{petId}
Response: 200 OK ← Nên là 204 No Content
{
"message": "Pet deleted"
}
Tại sao sai:
Các mã trạng thái HTTP có ý nghĩa cụ thể:
200 OKcó nghĩa là "yêu cầu thành công, đây là tài nguyên"201 Createdcó nghĩa là "tài nguyên đã được tạo, đây là nơi tìm thấy nó"204 No Contentcó nghĩa là "yêu cầu thành công, không có nội dung trả về"
Sử dụng 200 cho mọi thứ làm hỏng ngữ nghĩa HTTP. Các máy khách không thể phân biệt giữa "tài nguyên đã được truy xuất" và "tài nguyên đã được tạo". Trả về một nội dung với DELETE làm lãng phí băng thông—máy khách không cần văn bản xác nhận.
Khắc phục bằng Modern PetstoreAPI:
POST /pets
Response: 201 Created
Location: /pets/019b4132-70aa-764f-b315-e2803d882a24
{
"id": "019b4132-70aa-764f-b315-e2803d882a24",
"name": "Fluffy",
"status": "AVAILABLE"
}
DELETE /pets/{petId}
Response: 204 No Content
(không có nội dung)
Modern PetstoreAPI sử dụng các mã trạng thái HTTP chính xác và bao gồm các tiêu đề Location cho các tài nguyên đã tạo. Kiểm tra hướng dẫn mã trạng thái HTTP để biết ánh xạ hoàn chỉnh.
4. Mảng trần không có siêu dữ liệu
Vi phạm:
GET /pet/findByStatus?status=available
Response: 200 OK
[
{"id": 1, "name": "Fluffy"},
{"id": 2, "name": "Buddy"}
]
Tại sao sai:
Trả về các mảng trần tạo ra vấn đề:
- Không có siêu dữ liệu phân trang - Tổng cộng bao nhiêu mục? Tôi đang ở trang nào?
- Không có khả năng mở rộng - Không thể thêm siêu dữ liệu mà không làm hỏng máy khách
- Không có liên kết HATEOAS - Không thể bao gồm các liên kết điều hướng
- Rủi ro JSON Hijacking - Các mảng trần dễ bị tấn công bởi một số loại tấn công
Khắc phục bằng Modern PetstoreAPI:
GET /pets?status=AVAILABLE
Response: 200 OK
{
"data": [
{"id": "019b4132-70aa-764f-b315-e2803d882a24", "name": "Fluffy"},
{"id": "019b4127-54d5-76d9-b626-0d4c7bfce5b6", "name": "Buddy"}
],
"pagination": {
"page": 1,
"limit": 20,
"totalItems": 45,
"totalPages": 3
},
"links": {
"self": "/pets?status=AVAILABLE&page=1",
"next": "/pets?status=AVAILABLE&page=2",
"last": "/pets?status=AVAILABLE&page=3"
}
}
Modern PetstoreAPI bọc tất cả các bộ sưu tập trong các đối tượng có siêu dữ liệu và liên kết HATEOAS. Xem hướng dẫn phân trang để biết chi tiết triển khai.
5. Thiếu tiêu chuẩn lỗi
Vi phạm:
Response: 400 Bad Request
{
"code": 400,
"message": "Invalid input"
}
Tại sao sai:
Định dạng lỗi này không chuẩn và cung cấp thông tin tối thiểu:
- Không có định danh loại lỗi
- Không có lỗi xác thực cấp trường
- Không có mã lỗi có thể đọc được bằng máy
- Không tuân thủ RFC 9457 (Problem Details)
Khắc phục bằng Modern PetstoreAPI:
Response: 400 Bad Request
Content-Type: application/problem+json
{
"type": "https://petstoreapi.com/errors/validation-error",
"title": "Validation Error",
"status": 400,
"detail": "Request validation failed",
"instance": "/pets",
"errors": [
{
"field": "name",
"message": "Name is required",
"code": "REQUIRED_FIELD"
},
{
"field": "status",
"message": "Status must be one of: AVAILABLE, PENDING, SOLD",
"code": "INVALID_ENUM"
}
]
}
Modern PetstoreAPI sử dụng RFC 9457 Problem Details cho tất cả các lỗi. Xem hướng dẫn xử lý lỗi để biết định dạng lỗi hoàn chỉnh.
Các thảm họa bảo mật trong thiết kế cũ
Ngoài các vi phạm REST, Swagger Petstore còn có các vấn đề bảo mật nghiêm trọng.
Yêu cầu GET với mật khẩu
Vi phạm:
GET /user/login?username=john&password=secret123
Tại sao là thảm họa:
Mật khẩu trong các yêu cầu GET xuất hiện trong:
- Lịch sử trình duyệt - Bất kỳ ai có quyền truy cập vào trình duyệt đều thấy mật khẩu
- Nhật ký máy chủ - Máy chủ web ghi lại toàn bộ URL bao gồm các tham số truy vấn
- Tiêu đề giới thiệu (Referrer headers) - Nếu người dùng nhấp vào một liên kết sau khi đăng nhập, trang web tiếp theo sẽ thấy mật khẩu
- Nhật ký proxy - Các proxy doanh nghiệp ghi lại tất cả các URL
- Dấu trang trình duyệt - Người dùng có thể đánh dấu URL đăng nhập
Đây là một lỗ hổng bảo mật nghiêm trọng. Mật khẩu không bao giờ nên nằm trong URL.
Khắc phục bằng Modern PetstoreAPI:
POST /auth/login
Content-Type: application/json
{
"username": "john",
"password": "secret123"
}
Response: 200 OK
{
"accessToken": "eyJhbGc...",
"refreshToken": "eyJhbGc...",
"expiresIn": 3600
}
Modern PetstoreAPI sử dụng POST để xác thực với các nội dung JSON. Mật khẩu không bao giờ xuất hiện trong URL. Xem hướng dẫn xác thực để biết các mẫu OAuth 2.0 và JWT.
Khóa API trong tham số truy vấn
Vi phạm:
GET /pet/123?api_key=abc123secret
Tại sao sai:
Khóa API trong các tham số truy vấn có cùng vấn đề với mật khẩu trong URL:
- Bị ghi nhật ký ở mọi nơi
- Hiển thị trong lịch sử trình duyệt
- Được gửi trong tiêu đề giới thiệu
- Được proxy lưu vào bộ nhớ cache
Khắc phục bằng Modern PetstoreAPI:
GET /pets/019b4132-70aa-764f-b315-e2803d882a24
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Modern PetstoreAPI sử dụng các tiêu đề Authorization tiêu chuẩn cho khóa API và token. Xem hướng dẫn bảo mật để biết các mẫu xác thực.
Cách Modern PetstoreAPI khắc phục những vấn đề này
Modern PetstoreAPI được xây dựng từ đầu để trình bày thiết kế API REST phù hợp. Đây là những điểm khác biệt của nó:
Thiết kế REST sẵn sàng cho sản xuất
- Tên tài nguyên số nhiều nhất quán -
/pets,/orders,/users - URL hướng tài nguyên - Không có động từ hành động, chỉ có danh từ
- Mã trạng thái HTTP chính xác - 201 cho tạo mới, 204 cho xóa, mã lỗi phù hợp
- Trình bao bọc bộ sưu tập - Tất cả các danh sách bao gồm phân trang và siêu dữ liệu
- Lỗi RFC 9457 - Định dạng lỗi chuẩn với xác thực cấp trường
Các tiêu chuẩn hiện đại
- OpenAPI 3.2 - Đặc tả mới nhất với tất cả các tính năng
- RFC 9457 - Chi tiết sự cố cho API HTTP
- IETF Rate Limiting - Các tiêu đề
RateLimit-*tiêu chuẩn - ISO 8601 - Định dạng ngày/giờ phù hợp
- UUIDv7 - Định danh duy nhất có thể sắp xếp
Hỗ trợ đa giao thức
Không giống như Swagger Petstore (chỉ REST), Modern PetstoreAPI hỗ trợ:
- REST (OpenAPI 3.2)
- GraphQL
- gRPC
- WebSocket
- Server-Sent Events (SSE)
- MQTT
- Webhooks
- Model Context Protocol (MCP)
Xem hướng dẫn giao thức để biết chi tiết triển khai.
Logic kinh doanh thực tế
Modern PetstoreAPI bao gồm các tính năng thực tế:
- Xử lý thanh toán
- Quản lý hàng tồn kho
- Thực hiện đơn hàng
- Thông báo Webhook
- Đề xuất thú cưng được hỗ trợ bởi AI
- Tải lên và xử lý hình ảnh
Kiểm tra tài liệu API để biết bộ tính năng hoàn chỉnh.
Kiểm thử thiết kế API REST với Apidog
Apidog giúp bạn xác thực thiết kế API REST và phát hiện các vi phạm trước khi chúng đến giai đoạn sản xuất.
Nhập và xác thực thông số kỹ thuật OpenAPI
# Nhập thông số kỹ thuật Modern PetstoreAPI
1. Mở Apidog
2. Nhấp vào "Import" → "OpenAPI"
3. Nhập: https://petstoreapi.com/openapi.json
4. Apidog xác thực thông số kỹ thuật và tạo các trường hợp kiểm thử
Apidog tự động phát hiện:
- Đặt tên tài nguyên không nhất quán
- Thiếu mã trạng thái HTTP
- Cấu trúc phản hồi không hợp lệ
- Các vấn đề bảo mật trong xác thực
Kiểm thử các nguyên tắc REST
Tạo các trường hợp kiểm thử để xác minh sự tuân thủ REST:
Kiểm thử: Tên tài nguyên là số nhiều
// Kịch bản kiểm thử Apidog
pm.test("Endpoint sử dụng tên tài nguyên số nhiều", function() {
const url = pm.request.url.toString();
pm.expect(url).to.match(/\/pets\/|\/orders\/|\/users\//);
pm.expect(url).to.not.match(/\/pet\/|\/order\/|\/user\//);
});
Kiểm thử: Mã trạng thái chính xác
pm.test("POST trả về 201 Created", function() {
if (pm.request.method === "POST") {
pm.response.to.have.status(201);
pm.response.to.have.header("Location");
}
});
pm.test("DELETE trả về 204 No Content", function() {
if (pm.request.method === "DELETE") {
pm.response.to.have.status(204);
pm.expect(pm.response.text()).to.be.empty;
}
});
Kiểm thử: Các bộ sưu tập có siêu dữ liệu
pm.test("Phản hồi bộ sưu tập bao gồm phân trang", function() {
const response = pm.response.json();
pm.expect(response).to.have.property("data");
pm.expect(response).to.have.property("pagination");
pm.expect(response.pagination).to.have.property("page");
pm.expect(response.pagination).to.have.property("totalItems");
});
So sánh Petstore cũ và mới
Nhập cả hai đặc tả vào Apidog và chạy các so sánh song song:
- Nhập Swagger Petstore:
https://petstore.swagger.io/v2/swagger.json - Nhập Modern PetstoreAPI:
https://petstoreapi.com/openapi.json - Chạy các bài kiểm thử tự động trên cả hai
- So sánh kết quả để xem sự khác biệt
Apidog sẽ làm nổi bật các vi phạm thiết kế trong Swagger Petstore và cho thấy cách Modern PetstoreAPI khắc phục chúng.
Hướng dẫn di chuyển: Petstore cũ sang thiết kế hiện đại
Nếu bạn đã xây dựng một API dựa trên Swagger Petstore, đây là cách để di chuyển sang thiết kế REST phù hợp:
Bước 1: Sửa tên tài nguyên
Trước đây:
GET /pet/{petId}
POST /pet
DELETE /pet/{petId}
Sau đây:
GET /pets/{petId}
POST /pets
DELETE /pets/{petId}
Chiến lược di chuyển:
- Hỗ trợ cả hai điểm cuối trong quá trình chuyển đổi
- Thêm cảnh báo lỗi thời vào các điểm cuối cũ
- Cập nhật tài liệu để hiển thị các điểm cuối mới
- Theo dõi việc sử dụng và loại bỏ các điểm cuối cũ sau 6 tháng
Bước 2: Loại bỏ động từ hành động
Trước đây:
GET /pet/findByStatus?status=available
GET /pet/findByTags?tags=tag1,tag2
Sau đây:
GET /pets?status=AVAILABLE
GET /pets?tags=tag1,tag2
Chiến lược di chuyển:
- Chuyển hướng các điểm cuối cũ sang các điểm cuối mới với 301 Moved Permanently
- Cập nhật SDK máy khách để sử dụng các điểm cuối mới
- Thêm xác thực tham số truy vấn
Bước 3: Sửa mã trạng thái HTTP
Trước đây:
POST /pet → 200 OK
DELETE /pet/{petId} → 200 OK with body
Sau đây:
POST /pets → 201 Created with Location header
DELETE /pets/{petId} → 204 No Content (không có nội dung)
Chiến lược di chuyển:
- Đây là một thay đổi gây phá vỡ cho các máy khách kiểm tra mã trạng thái
- Phiên bản hóa API của bạn (v2) với các mã trạng thái chính xác
- Ghi lại các thay đổi một cách rõ ràng
- Cung cấp thời gian biểu di chuyển
Bước 4: Bọc bộ sưu tập
Trước đây:
[
{"id": 1, "name": "Fluffy"},
{"id": 2, "name": "Buddy"}
]
Sau đây:
{
"data": [...],
"pagination": {...},
"links": {...}
}
Chiến lược di chuyển:
- Đây là một thay đổi gây phá vỡ
- Tạo các điểm cuối v2 với các phản hồi được bọc
- Loại bỏ các điểm cuối v1
- Cập nhật mã máy khách để xử lý cấu trúc mới
Bước 5: Triển khai lỗi RFC 9457
Trước đây:
{
"code": 400,
"message": "Invalid input"
}
Sau đây:
{
"type": "https://petstoreapi.com/errors/validation-error",
"title": "Validation Error",
"status": 400,
"detail": "Request validation failed",
"errors": [...]
}
Chiến lược di chuyển:
- Thêm tiêu đề
Content-Type: application/problem+json - Bao gồm cả định dạng lỗi cũ và mới trong quá trình chuyển đổi
- Cập nhật cách xử lý lỗi của máy khách
- Loại bỏ định dạng cũ sau thời gian di chuyển
Tác động thực tế của thiết kế API tồi
Thiết kế API tồi có những chi phí thực tế:
Sự nhầm lẫn của nhà phát triển
Khi API vi phạm các nguyên tắc REST, nhà phát triển lãng phí thời gian:
- Đoán xem nên sử dụng phương thức HTTP nào
- Tìm ra các mẫu đặt tên không nhất quán
- Gỡ lỗi các mã trạng thái không mong muốn
- Xử lý lỗi mà không có cấu trúc phù hợp
Chi phí: Hàng giờ làm việc của nhà phát triển cho mỗi lần tích hợp
Lỗi máy khách
Các API không nhất quán dẫn đến lỗi phía máy khách:
- Lỗi phân tích cú pháp từ các cấu trúc phản hồi không mong muốn
- Lỗi xác thực từ các phương thức HTTP sai
- Các vấn đề phân trang từ siêu dữ liệu bị thiếu
- Lỗi xử lý lỗi từ các định dạng không chuẩn
Chi phí: Sự cố sản xuất và tác động đến khách hàng
Lỗ hổng bảo mật
Lỗi thiết kế tạo ra rủi ro bảo mật:
- Mật khẩu trong URL bị ghi nhật ký
- Khóa API trong tham số truy vấn bị lưu vào bộ nhớ cache
- Thiếu xác thực trên các điểm cuối nhạy cảm
- Thông báo lỗi không phù hợp làm rò rỉ thông tin hệ thống
Chi phí: Vi phạm dữ liệu và vi phạm tuân thủ
Nợ kỹ thuật
Các ví dụ tồi tích tụ theo thời gian:
- Các nhà phát triển mới học anti-pattern
- Trình tạo mã tạo ra các SDK có lỗi
- Tài liệu hiển thị các ví dụ không chính xác
- Các công ty xây dựng API mới với những lỗi tương tự
Chi phí: Gánh nặng bảo trì dài hạn
Kết luận
Swagger Petstore đã phục vụ mục đích của nó như một ví dụ OpenAPI đơn giản, nhưng đã đến lúc tiến lên. Các vi phạm REST, vấn đề bảo mật và anti-pattern của nó đã ảnh hưởng đến quá nhiều API sản xuất.
Modern PetstoreAPI cung cấp triển khai tham chiếu mà ngành công nghiệp cần: thiết kế REST phù hợp, tiêu chuẩn hiện đại, hỗ trợ đa giao thức và các mẫu sẵn sàng cho sản xuất. Hãy sử dụng nó làm tài liệu học tập và tham khảo cho thiết kế API của bạn.
Kiểm thử API của bạn bằng Apidog để phát hiện các vi phạm thiết kế sớm. Nhập thông số kỹ thuật OpenAPI của bạn, chạy các bài kiểm thử tự động và đảm bảo API của bạn tuân thủ các nguyên tắc REST trước khi chúng đến giai đoạn sản xuất.
Các bước tiếp theo:
- Khám phá tài liệu Modern PetstoreAPI
- So sánh thiết kế API của bạn với các mẫu Modern PetstoreAPI
- Nhập thông số kỹ thuật OpenAPI của bạn vào Apidog để xác thực
- Khắc phục các vi phạm REST bằng cách sử dụng hướng dẫn di chuyển ở trên
- Áp dụng RFC 9457 để xử lý lỗi
Thời đại của những ví dụ API tồi đã kết thúc. Xây dựng API đúng cách với Modern PetstoreAPI.
Câu hỏi thường gặp
Tại sao Swagger lại tạo ra một ví dụ tồi?
Swagger Petstore được tạo ra vào năm 2011 như một bản trình diễn đơn giản về đặc tả Swagger. Nó không được coi là tài liệu tham khảo thiết kế API REST. Vấn đề là nó đã trở thành ví dụ tiêu chuẩn trên thực tế, và những lỗi của nó đã được hàng triệu nhà phát triển sao chép.
Tôi có nên ngừng sử dụng Swagger Petstore không?
Có, đối với việc học thiết kế API REST. Thay vào đó, hãy sử dụng Modern PetstoreAPI. Nó trình bày các nguyên tắc REST phù hợp, tiêu chuẩn hiện đại và các mẫu sẵn sàng cho sản xuất. Petstore cũ dạy các anti-pattern gây hại cho hệ thống sản xuất.
Modern PetstoreAPI đã sẵn sàng cho sản xuất chưa?
Có. Modern PetstoreAPI bao gồm logic kinh doanh thực tế, xử lý lỗi phù hợp, xác thực, giới hạn tốc độ và các tính năng bảo mật. Bạn có thể triển khai nó với những sửa đổi tối thiểu hoặc sử dụng nó làm tài liệu tham khảo cho thiết kế API của riêng bạn.
Làm cách nào để kiểm tra xem API của tôi có tuân thủ các nguyên tắc REST không?
Nhập thông số kỹ thuật OpenAPI của bạn vào Apidog và chạy các bài kiểm thử tự động. Apidog xác thực việc đặt tên tài nguyên, mã trạng thái HTTP, cấu trúc phản hồi và các mẫu bảo mật. Bạn cũng có thể so sánh API của mình song song với Modern PetstoreAPI.
Lỗi lớn nhất trong Swagger Petstore là gì?
Sử dụng GET /user/login với mật khẩu trong tham số truy vấn. Điều này làm lộ mật khẩu trong lịch sử trình duyệt, nhật ký máy chủ và tiêu đề giới thiệu—một lỗ hổng bảo mật nghiêm trọng. Luôn sử dụng POST với nội dung JSON để xác thực.
Tôi có thể di chuyển từ các mẫu Swagger Petstore một cách dần dần không?
Có. Hỗ trợ cả điểm cuối cũ và mới trong giai đoạn chuyển đổi. Thêm cảnh báo lỗi thời vào các điểm cuối cũ, cập nhật tài liệu và theo dõi việc sử dụng. Xóa các điểm cuối cũ sau khi máy khách đã di chuyển (thường là 6-12 tháng).
Modern PetstoreAPI có hỗ trợ GraphQL và gRPC không?
Có. Không giống như Swagger Petstore (chỉ REST), Modern PetstoreAPI hỗ trợ nhiều giao thức: REST, GraphQL, gRPC, WebSocket, SSE, MQTT, Webhooks và MCP. Xem hướng dẫn giao thức để biết chi tiết.
Làm cách nào để thuyết phục nhóm của tôi sửa thiết kế API của chúng tôi?
Cho họ thấy những chi phí thực tế: sự nhầm lẫn của nhà phát triển, lỗi máy khách, lỗ hổng bảo mật và nợ kỹ thuật. Sử dụng Apidog để chứng minh các vi phạm trong API hiện tại của bạn. So sánh thiết kế của bạn với Modern PetstoreAPI và cho thấy những cải tiến.
