Có một số câu trả lời hay ở đây, nhưng tôi không chắc rằng chúng sẽ giúp bạn thuyết phục đồng nghiệp. Như nhiều người đã chỉ ra, những gì bạn đang đề xuất không phải là một sự thay đổi so với thiết kế RESTful và tôi nghĩ đó là chìa khóa để đưa họ lên tàu với đề xuất của bạn.
REST không đảm bảo API của bạn chỉ cho phép lưu trữ và truy xuất dữ liệu. Thay vào đó, nó quan tâm đến việc mô hình hóa các hành động như tài nguyên. API của bạn sẽ cho phép các hành động được thực hiện (rốt cuộc đó là Giao diện lập trình ứng dụng ). Câu hỏi là làm thế nào để mô hình hóa những hành động đó.
Thay vì đưa ra một thuật ngữ, các ví dụ có lẽ là cách tốt nhất để giải thích điều này với đồng nghiệp của bạn . Bằng cách này, bạn có thể cho thấy hiện tại họ đang làm gì, vấn đề này gây ra vấn đề gì, giải pháp giải quyết vấn đề và làm thế nào nó vẫn còn RESTful.
Hãy nhìn vào đối tượng khách hàng của bạn.
Vấn đề:
Giao diện người dùng gửi một khách hàng, nhưng các bảng tiếp theo chưa được cập nhật. Điều gì xảy ra nếu một trong những cuộc gọi tiếp theo không thành công do lỗi trong mã UI của bạn (hoặc trình duyệt trình duyệt sai, v.v.)? Bây giờ dữ liệu của bạn đang ở trong một trạng thái không nhất quán. Nó thậm chí có thể là một trạng thái phá vỡ các phần khác của API hoặc UI của bạn, chưa kể rằng nó đơn giản là không hợp lệ. Làm thế nào để bạn phục hồi? Bạn sẽ phải kiểm tra mọi trạng thái có thể để chắc chắn điều này sẽ không phá vỡ thứ gì đó, nhưng sẽ rất khó để biết điều gì có thể xảy ra.
Dung dịch:
Tạo một điểm cuối API để tạo khách hàng. Bạn biết rằng bạn không muốn có điểm cuối "/ khách hàng / tạo" hoặc thậm chí "/ tạo-khách hàng", bởi vì tạo là một động từ và sẽ vi phạm REST. Vì vậy, danh từ đó. "/ Tạo khách hàng" có thể làm việc. Bây giờ khi bạn POST đối tượng CustomerCreation của mình, nó sẽ gửi tất cả các trường cần thiết cho một khách hàng được tạo hoàn toàn. Điểm cuối sẽ đảm bảo rằng dữ liệu hoàn chỉnh và hợp lệ (ví dụ trả về 400 hoặc thứ gì đó nếu không xác thực) và có thể duy trì tất cả trong một giao dịch db, chẳng hạn.
Nếu bạn cũng cần một điểm cuối để NHẬN / đối tượng khách hàng, điều đó tốt. Bạn có thể có cả hai. Bí quyết là tạo ra các điểm cuối phục vụ nhu cầu của người tiêu dùng.
Ưu điểm:
- Bạn đảm bảo rằng bạn sẽ không kết thúc với trạng thái xấu
- Nó thực sự dễ dàng hơn trên các nhà phát triển UI nếu họ không phải "biết" việc đặt hàng các yêu cầu, mối quan tâm xác nhận, v.v.
- Đây không phải là trò chuyện của API, giảm độ trễ của yêu cầu mạng
- Việc kiểm tra và khái niệm hóa các kịch bản dễ dàng hơn (các phần dữ liệu bị thiếu / không đúng định dạng từ giao diện người dùng không lan truyền trong các yêu cầu, một số trong đó có thể thất bại)
- Nó cho phép đóng gói logic kinh doanh tốt hơn
- Nói chung làm cho bảo mật dễ dàng hơn (vì logic kinh doanh và phối hợp trong UI có thể được sửa đổi bởi người dùng)
- Sẽ có khả năng giảm trùng lặp logic (nhiều khả năng bạn sẽ có hơn 2 người tiêu dùng API hơn 2+ API cung cấp quyền truy cập vào cùng một dữ liệu)
- Vẫn 100% RESTful
Nhược điểm:
- Nó có khả năng làm việc nhiều hơn cho nhà phát triển phụ trợ (nhưng có thể không hoạt động lâu dài)
Mọi người có thể khó hiểu được mô hình này và điều gì tốt cho nó nếu họ chưa thử. Hy vọng bạn có thể giúp họ nhìn thấy bằng cách sử dụng một ví dụ từ mã của riêng bạn.
Kinh nghiệm của riêng tôi là một khi các nhà phát triển trong nhóm của tôi bắt đầu thực hiện chiến lược này, họ gần như ngay lập tức thấy được lợi ích.
Học cao hơn:
Bài viết này từ thinkworks thực sự đã giúp tôi có được ý tưởng mô hình hóa các hành động như các đối tượng bằng cách sử dụng các ví dụ thực tế: https : // www. Dùtworks.com/insights/blog/rest-api-design-resource-modeling
Tôi cũng đề nghị đọc lên CQRS và Tìm nguồn sự kiện vì họ quan tâm chính xác đến loại điều này (tức là tách API của bạn khỏi logic kiên trì thực tế). Tôi không biết đồng nghiệp của bạn sẽ sẵn lòng đọc loại tin này như thế nào, nhưng nó có thể giúp bạn rõ ràng hơn và giúp bạn giải thích cho họ.