Vì vậy, một dịch vụ RESTful có một bộ động từ cố định trong từ vựng của nó. Một dịch vụ web RESTful lấy những thứ này từ các phương thức HTTP. Có một số lợi thế được cho là để xác định từ vựng cố định, nhưng tôi không thực sự nắm bắt được vấn đề. Có lẽ ai đó có thể giải thích nó.
Tại sao một từ vựng cố định được REST vạch ra tốt hơn là tự động xác định từ vựng cho từng trạng thái? Ví dụ, lập trình hướng đối tượng là một mô hình phổ biến. RPC được mô tả để xác định các giao diện cố định, nhưng tôi không biết tại sao mọi người cho rằng RPC bị giới hạn bởi các điều khoản này. Chúng tôi có thể tự động chỉ định giao diện giống như một dịch vụ RESTful mô tả động cấu trúc nội dung của nó.
REST được cho là có lợi thế ở chỗ nó có thể phát triển mà không cần mở rộng vốn từ vựng. Các dịch vụ RESTful phát triển linh hoạt bằng cách thêm nhiều tài nguyên hơn. Có gì sai khi mở rộng dịch vụ bằng cách tự động chỉ định từ vựng theo từng đối tượng? Tại sao chúng ta không sử dụng các phương thức được xác định trên các đối tượng của mình làm từ vựng và các dịch vụ của chúng tôi mô tả cho khách hàng những phương thức này là gì và liệu chúng có tác dụng phụ hay không?
Về cơ bản tôi có cảm giác rằng mô tả cấu trúc tài nguyên phía máy chủ tương đương với định nghĩa của từ vựng, nhưng sau đó chúng tôi buộc phải sử dụng từ vựng hạn chế để tương tác với các tài nguyên này.
Liệu một từ vựng cố định có thực sự tách rời mối quan tâm của khách hàng khỏi mối quan tâm của máy chủ không? Tôi chắc chắn phải quan tâm đến một số cấu hình của máy chủ, đây thường là vị trí tài nguyên trong các dịch vụ RESTful. Để phàn nàn về việc sử dụng một từ vựng động có vẻ không công bằng bởi vì chúng ta phải tự động lý do làm thế nào để hiểu cấu hình này theo một cách nào đó. Một dịch vụ RESTful mô tả các chuyển đổi bạn có thể thực hiện bằng cách xác định cấu trúc đối tượng thông qua hypermedia.
Tôi chỉ không hiểu điều gì làm cho một từ vựng cố định tốt hơn bất kỳ từ vựng động tự mô tả nào, có thể dễ dàng hoạt động rất tốt trong một dịch vụ giống như RPC. Đây có phải chỉ là một lý do kém cho từ vựng hạn chế của giao thức HTTP?
Suy tư
Chỉ cần làm rõ suy nghĩ của tôi tốt hơn một chút so với tôi đã làm. Giả sử bạn đang thiết kế bất kỳ API mục đích chung nào, thậm chí có thể không phải đối mặt với web. Bạn có vui không nếu ai đó nói rằng bạn chỉ có thể sử dụng các tên phương thức này trên các đối tượng của mình? REST không bị hạn chế đối với HTTP, nhưng hãy xem xét tình huống mà mọi API bạn viết, web phải đối mặt hoặc đơn giản chỉ bao gồm các đối tượng có chứa các phương thức GET POST PUT và DELETE. Vì vậy, phương thức object.foo mà bạn muốn xác định là không thể. Bạn phải xác định một đối tượng mới gọi là foo và gọi phương thức GET của nó. Đó chính là cách thức hoạt động của REST và nó khiến tôi hơi khó chịu khi nghĩ về nó. Bạn không có bất kỳ hiểu biết chung nào tốt hơn về những gì foo làm, bạn chỉ bị buộc phải tạo một đối tượng mới cho những gì thực chất là một phương thức trên một đối tượng cha. Hơn nữa, API của bạn không kém phần phức tạp, bạn vừa ẩn sự phức tạp của giao diện bằng cách tạo ra nhiều đối tượng hơn. Các dịch vụ web RESTful buộc chúng tôi chấp nhận một giao diện có thể có hoặc không đủ trong bối cảnh API mà chúng tôi đang phơi bày. Có lẽ có một lý do chính đáng để làm điều này với các API phải đối mặt với web, nhưng một lý do chính đáng để không áp dụng các giao diện chuẩn cho mọi đối tượng trong mọi API mục đích chung. Một ví dụ thực tế sẽ được đánh giá cao.