Đáp ứng đúng cho một chèn REST - bản ghi mới đầy đủ, hoặc chỉ giá trị id bản ghi?


15

Tôi đang xây dựng API REST cho phép chèn (POST, không phải idempotent) và các yêu cầu cập nhật (PUT, idempotent) để thêm / cập nhật cơ sở dữ liệu vào ứng dụng của chúng tôi.

Tôi tự hỏi liệu có bất kỳ tiêu chuẩn hoặc thực tiễn tốt nhất nào liên quan đến dữ liệu nào chúng tôi gửi lại cho khách hàng trong phản hồi cho hoạt động POST (insert) không. Chúng tôi cần gửi lại ít nhất một giá trị ID hồ sơ (ví dụ: bản ghi mới của bạn là bản ghi # 1234).

Chúng ta có nên trả lời với các đối tượng đầy đủ? (ví dụ về cơ bản là cùng một phản hồi mà họ sẽ nhận được từ yêu cầu "GET / object_type / 1234")

Chúng ta có nên trả lời chỉ với giá trị ID mới không? (ví dụ: "{id: 1234}", có nghĩa là nếu họ muốn tìm nạp toàn bộ bản ghi, họ cần thực hiện một yêu cầu HTTP GET bổ sung để lấy bản ghi đầy đủ)

Một tiêu đề chuyển hướng trỏ chúng đến URL cho toàn bộ đối tượng?

Cái gì khác hoàn toàn?


Tôi chắc chắn về cách thực hành tốt nhất nhưng với cá nhân tôi, tôi có lẽ sẽ cân nhắc việc trả lại id mới được tạo nếu thành công nếu không -1 vv Hãy quan tâm xem những gì người khác nói mặc dù
dreza

Câu trả lời:


13

Chà, trong giao diện REST, theo HTTP bất cứ khi nào có thể, tôi sẽ trả về 201 và URI trong trường tiêu đề Vị trí cho Tài nguyên mới được tạo. Dưới đây là những gì Định nghĩa Mã trạng thái nói:

10.2.2 201 Tạo

Yêu cầu đã được thực hiện và dẫn đến một tài nguyên mới được tạo ra. Tài nguyên mới được tạo có thể được tham chiếu bởi (các) URI được trả về trong thực thể của phản hồi, với URI cụ thể nhất cho tài nguyên được cung cấp bởi trường tiêu đề Vị trí. Phản hồi NÊN bao gồm một thực thể chứa danh sách các đặc điểm tài nguyên và (các) vị trí mà từ đó người dùng hoặc tác nhân người dùng có thể chọn một thực thể phù hợp nhất. Định dạng thực thể được chỉ định bởi loại phương tiện được cung cấp trong trường tiêu đề Kiểu nội dung. Máy chủ gốc PHẢI tạo tài nguyên trước khi trả lại mã trạng thái 201. Nếu hành động không thể được thực hiện ngay lập tức, máy chủ NÊN trả lời với phản hồi 202 (Được chấp nhận) thay thế.

Nếu có sự cố xảy ra, tôi sẽ cho rằng bạn không nên quay lại -1như những người khác đã nói, mà chỉ đơn giản là Mã lỗi Máy khách hoặc Máy chủ (4xx hoặc 5xx). Ví dụ: nếu người dùng không được phép tạo một số tài nguyên mới, bạn chỉ cần trả lại "401 trái phép", không hơn không kém.


Còn cơ thể thì sao? trống hoặc toàn bộ đối tượng mới được tạo ra trong phản ứng?
Nhà phát triển

Hai tùy chọn phổ biến mà tôi biết là 1) đặt tiêu đề vị trí đến nơi có thể tìm thấy thực thể mới hoặc 2) bao gồm thực thể mới trong cơ thể. Cá nhân tôi đi với cái sau vì lý do thực tế. Somtimes kết hợp cho cảm giác yên tĩnh hơn;)
Bruno Schäpper
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.