2012-09-17 19 views
22

Một trong những điểm chính của việc xây dựng một API RESTful là HATEOAS. Giờ đây, Jersey cung cấp khả năng liên kết khá tốt (xem this link). Nhưng tôi đã thấy bản nháp của HAL Specification và dường như nó là một tác phẩm được suy nghĩ tốt.Thực hiện HATEOAS với HAL ở Jersey

Tôi quan tâm nếu có một số lib giúp bạn dễ dàng tuân theo HAL ở Jersey. Tôi đã thấy các tài liệu tham khảo được đề cập trong bản nháp như https://github.com/HalBuilder. Nhưng tôi đang sử dụng trực tiếp marshalling POJO và tôi không biết làm thế nào để trộn với Halbuilder.

Vì vậy, đã có một số lib kết hợp HAL vào Jersey? Hoặc có lẽ tôi có thể sử dụng một số loại bộ lọc để tăng cường POJO được tạo theo cách thủ công? Nếu có, ai đó có thể cho tôi một đầu mối nơi để xem xét tiếp theo để thực hiện điều này?

+4

Ôi trời, một thông số khác của một người nghĩ rằng không gian tên là một điều xấu và dường như chỉ nhận thức một phần công việc hiện có trong lĩnh vực này. (Đừng bận tâm với tôi. Đó không phải là lỗi của bạn. Chỉ cần nhấn mạnh rằng rất nhiều người - không bao giờ học được. Sigh…) –

+0

Không vấn đề gì, có lẽ bạn có thể gợi ý tôi về công việc hiện tại? Tôi mới đến REST và cố gắng tìm cách của tôi xung quanh nó. – Sponiro

+0

@DonalFellows Công việc khác là gì? Bạn có nghĩa là một tiêu chuẩn cho JSON Hypermedia?Hoặc bạn nên sử dụng XML cho Hateoas? Giữa GitHUB, Facebook, Google, vv, mỗi RESTful API dường như sử dụng một định dạng hơi khác để biểu diễn các liên kết khám phá vì không có chuẩn nào tồn tại cho JSON. Có gì sai khi sử dụng HAL hoặc một số tiêu chuẩn như vậy và sau đó có một thư viện như Halbuilder để làm cho nó dễ thực hiện? –

Trả lời

1

Thậm chí nếu điều này là không thực sự là một câu trả lời, tôi đã không đủ ký tự để đặt nó trong một chú thích :)

Nếu bạn thực sự mới để REST, tôi nghĩ rằng bạn đang bắt đầu có lẽ là một cách sai lầm . Tôi không biết chính xác yêu cầu của bạn, nhưng nếu bạn chỉ muốn học, hãy bắt đầu với một dịch vụ REST dễ dàng, sử dụng Web API từ .net hoặc một cái gì đó tương tự trong Java (một servlet đơn giản sẽ là đủ) và cố gắng thực hiện một dịch vụ chỉ sử dụng các công cụ được cung cấp bởi http (động từ, tiêu đề yêu cầu và tải trọng, thông báo phản hồi). Quy tắc thiết kế REST API của Marc Massé có thể là một tài liệu tham khảo tốt để tìm hiểu. Tạo giao thức truyền thông của riêng bạn với POJO hoặc POCO và một khi bạn thực sự làm những gì bạn có thể làm REST và cách nó hoạt động, bạn có thể sử dụng một khung công tác để giảm bớt công việc của mình.

Nếu bạn bắt đầu với một khuôn khổ, bạn có thể bỏ lỡ bản chất của khái niệm ...

Tôi hy vọng điều đó sẽ hữu ích!

+0

Tôi chỉ có thể thứ hai đó. Nó dạy rất nhiều ở nhiều cấp độ, mà không đi sâu vào địa ngục. Điều quan trọng nhất người ta sẽ học là làm thế nào để nói một khuôn khổ tốt từ một cái xấu. –

0

Nó rất ít cần thiết để tuân thủ HAL. Tôi đề nghị bạn cuộn thư viện nhỏ của riêng mình, nơi bạn bọc POJO của bạn trong các đối tượng HAL. Bằng cách này bạn sẽ nhận được mã theo cách bạn thích và nó sẽ đơn giản hơn HalBuilder.

2

Tôi không thể tìm thấy bất kỳ hỗ trợ trực tiếp nào cho điều này ở Jersey, nhưng cần có cách để tùy chỉnh trình soạn thảo mà Jersey sử dụng để chuyển đổi POJO của bạn thành JSON. (hoặc bằng cách sử dụng HalBuilder, hoặc tạo một số mã tương thích HAL của riêng bạn)

Nếu bạn sử dụng Jerseys JAXB based JSON support, hãy xem BootstrapTypeConverterTest trong mã nguồn jettison để minh họa cách chuyển đổi có thể được sử dụng để hỗ trợ đầu ra JSON. Chuyển đổi đơn vị thử nghiệm đến/từ JSON nên là một nhiệm vụ đơn giản và dự án nhà tù có các ví dụ tốt để xem xét.

Nếu bạn sử dụng Jerseys "POJO Support"-method, hãy xem JacksonHowToCustomSerializers để có ví dụ tương tự về cách tạo công cụ sắp xếp tùy chỉnh của bạn.

(Nếu JAXB là tham gia, bạn cũng có thể làm những điều lý thú như processing custom annotations.)

Bạn có thể có một ý tưởng khá tốt về cách đối tượng của bạn (đầu vào) trông như thế nào và mã JSON (đầu ra) bạn mong đợi, do đó, việc tạo các bài kiểm tra đơn vị cho các chuyển đổi này phải là một nhiệm vụ tương đối đơn giản.

+1

'halbuilder-jaxrs' cung cấp một tích hợp tốt đẹp. Đừng quên đăng ký 'JaxRsHalBuilderSupport' như một người viết nội dung thư. –

+0

Tôi đang đi với https://github.com/Nykredit/jackson-dataformat-hal, trông nhẹ và linh hoạt. – sschrass