Không ai trong cộng đồng REST nói rằng REST là dễ dàng. HATEOAS chỉ là một trong những khía cạnh làm tăng thêm độ khó cho kiến trúc REST.
Mọi người không làm HATEOAS vì tất cả những lý do bạn đề xuất: nó khó. Nó làm tăng thêm sự phức tạp cho cả phía máy chủ và máy khách (nếu bạn thực sự muốn hưởng lợi từ nó).
TUY NHIÊN, hàng tỷ người trải nghiệm những lợi ích của REST ngày nay. Bạn có biết URL "thanh toán" tại Amazon là gì không? Tôi không. Tuy nhiên, tôi có thể thanh toán mỗi ngày. URL đó có thay đổi không? Tôi không biết, tôi không quan tâm.
Bạn có biết chăm sóc không? Bất kỳ ai viết màn hình đều đánh dấu ứng dụng khách tự động của Amazon. Một người có khả năng đã cẩn thận đánh hơi lưu lượng truy cập web, đọc các trang HTML, v.v. để tìm những liên kết nào cần gọi khi nào và với tải trọng nào.
Và ngay sau khi Amazon thay đổi các quy trình nội bộ và cấu trúc URL của họ, những khách hàng được mã hóa cứng đó đã thất bại - vì các liên kết bị hỏng.
Tuy nhiên, những người lướt web bình thường có thể mua sắm cả ngày mà hầu như không gặp khó khăn.
Đó là REST trong hoạt động, nó chỉ được tăng cường bởi con người có thể giải thích và đưa vào giao diện dựa trên văn bản, nhận ra một hình ảnh nhỏ với giỏ hàng và tìm hiểu ý nghĩa thực sự của điều đó.
Hầu hết mọi người viết phần mềm không làm điều đó. Hầu hết những người viết ứng dụng khách tự động không quan tâm. Hầu hết mọi người nhận thấy việc sửa chữa khách hàng của họ khi họ bị hỏng dễ dàng hơn so với việc thiết kế ứng dụng để không bị hỏng ngay từ đầu. Hầu hết mọi người chỉ đơn giản là không có đủ khách hàng ở nơi quan trọng.
Nếu bạn đang viết một API nội bộ để giao tiếp giữa hai hệ thống với sự hỗ trợ kỹ thuật của chuyên gia và CNTT ở cả hai phía của lưu lượng truy cập, những người có thể truyền đạt các thay đổi nhanh chóng, đáng tin cậy và với lịch trình thay đổi, thì REST không mua gì cho bạn. Bạn không cần nó, ứng dụng của bạn không đủ lớn và nó không đủ lâu để tồn tại.
Các trang web lớn với cơ sở người dùng lớn có vấn đề này. Họ không thể chỉ yêu cầu mọi người thay đổi mã khách hàng của họ một cách bất chợt khi tương tác với hệ thống của họ. Lịch trình phát triển máy chủ không giống với lịch phát triển máy khách. Những thay đổi đột ngột đối với API đơn giản là không thể chấp nhận được đối với tất cả mọi người liên quan, vì nó làm gián đoạn lưu lượng truy cập và hoạt động của cả hai bên.
Vì vậy, một hoạt động như vậy rất có thể sẽ được hưởng lợi từ HATEOAS, vì nó dễ tạo phiên bản hơn, dễ dàng di chuyển cho các máy khách cũ hơn, dễ tương thích ngược hơn là không.
Máy khách ủy thác phần lớn luồng công việc của nó cho máy chủ và hoạt động dựa trên kết quả đối với các thay đổi của máy chủ mạnh mẽ hơn nhiều so với một máy khách không làm như vậy.
Nhưng hầu hết mọi người không cần sự linh hoạt đó. Họ đang viết mã máy chủ cho 2 hoặc 3 phòng ban, tất cả đều được sử dụng nội bộ. Nếu nó bị hỏng, họ sẽ sửa nó và họ đã tính điều đó vào các hoạt động bình thường của họ.
Tính linh hoạt, cho dù từ REST hay bất kỳ thứ gì khác, đều tạo ra sự phức tạp. Nếu bạn muốn nó đơn giản và nhanh chóng, thì bạn không làm cho nó linh hoạt, bạn "cứ làm", và xong. Khi bạn thêm các phần tóm tắt và tham chiếu vào hệ thống, thì mọi thứ sẽ khó hơn, nhiều đĩa lò hơi hơn, nhiều mã hơn để kiểm tra.
Phần lớn REST không đạt được gạch đầu dòng "bạn sẽ không cần nó". Tất nhiên, cho đến khi bạn làm.
Nếu bạn cần nó, hãy sử dụng nó, và sử dụng nó khi nó được bày ra. REST không chuyển nội dung qua lại HTTP. Nó chưa bao giờ xảy ra, nó cao hơn thế nhiều.
Nhưng khi bạn cần REST và bạn sử dụng REST, thì HATEOAS là một thứ cần thiết. Đó là một phần của gói và là chìa khóa để làm cho nó hoạt động.