Khi so sánh cấu trúc REST [api] với mô hình OO, tôi thấy những điểm tương đồng sau:
Cả hai:
Được định hướng dữ liệu
- REST = Tài nguyên
- OO = Đối tượng
Hoạt động xung quanh dữ liệu
- REST = bao quanh ĐỘNG TỪ (Nhận, Đăng, ...) xung quanh các tài nguyên
- OO = thúc đẩy hoạt động xung quanh các đối tượng bằng cách đóng gói
Tuy nhiên, các thực tiễn OO tốt không phải lúc nào cũng đứng trên apis REST khi cố gắng áp dụng mẫu mặt tiền: trong REST, bạn không có 1 bộ điều khiển để xử lý tất cả các yêu cầu VÀ bạn không che giấu sự phức tạp của đối tượng bên trong.
Ngược lại, REST khuyến khích xuất bản tài nguyên của tất cả các mối quan hệ với một tài nguyên và khác trên ít nhất hai hình thức:
thông qua quan hệ phân cấp tài nguyên (Một liên hệ của id 43 bao gồm một địa chỉ 453):
/api/contacts/43/addresses/453
thông qua các liên kết trong phản hồi json REST:
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
Quay trở lại OO, mẫu thiết kế mặt tiền tôn trọng Low Coupling
giữa một objectA và ' objectB client ' của nó và High Cohesion
cho objectA này và thành phần đối tượng bên trong của nó ( objectC , objectD ). Với objectA giao diện, điều này cho phép một nhà phát triển để tác động giới hạn về objectB của objectA thay đổi nội bộ (trong objectC và objectD ), miễn là objectA api (hoạt động) vẫn được tôn trọng.
Trong REST, dữ liệu (tài nguyên), các mối quan hệ (liên kết) và hành vi (động từ) được phát nổ trong các yếu tố khác nhau và có sẵn cho web.
Chơi với REST, tôi luôn có tác động đến thay đổi mã giữa máy khách và máy chủ của mình: Bởi vì tôi có High Coupling
giữa Backbone.js
các yêu cầu của mình và Low Cohesion
giữa các tài nguyên.
Tôi chưa bao giờ tìm ra cách để cho Backbone.js javascript application
thỏa thuận của tôi với khám phá " tài nguyên và tính năng REST " được thúc đẩy bởi các liên kết REST. Tôi hiểu rằng WWW có nghĩa là được phục vụ bởi nhiều máy chủ và các yếu tố OO phải được phát nổ để được phục vụ bởi nhiều máy chủ trong đó, nhưng đối với một kịch bản đơn giản như "lưu" một trang hiển thị liên hệ với địa chỉ của nó, Tôi kết thúc với:
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
điều này dẫn tôi đến việc chuyển trách nhiệm giao dịch nguyên tử hành động tiết kiệm trên các ứng dụng trình duyệt (vì hai tài nguyên có thể được xử lý riêng).
Với suy nghĩ này, nếu tôi không thể đơn giản hóa sự phát triển của mình (các mẫu thiết kế mặt tiền không áp dụng) và nếu tôi mang lại sự phức tạp hơn cho khách hàng của mình (xử lý tiết kiệm nguyên tử giao dịch), thì lợi ích của việc RESTful là gì?
PUT /api/contacts/43
tầng các bản cập nhật cho các đối tượng bên trong là gì? Tôi đã có rất nhiều API được thiết kế như thế này (URL chính đọc / tạo / cập nhật "toàn bộ" và các url phụ cập nhật các phần). Chỉ cần đảm bảo rằng bạn không cập nhật địa chỉ khi không có thay đổi nào được yêu cầu (vì lý do hiệu suất).