我和一位同事討論過,他真的很喜歡REST,但我仍然需要確信好處。REST是API還是:REST vs Java接口?
我的主要問題是,從消費應用程序的角度來看,我並不真正將REST看作API或接口。讓我詳細說明一下。我們有兩個使用RESTful API調用另一個的應用程序。這是使用JAX-RS和RESTeasy實現的。儘管使用RESTeasy,但基於接口生成REST客戶端也很簡單。
所以我們假設這是一個處理書籍和作者的系統。應用程序需要知道一本書,讓我們假設它已經知道一些ID。
- 在休息,它會調用例如
http://server/book/21
,得到返回的任意有效載荷和它deserialise爲Book
對象。 - 使用RESTeasy客戶端,我們有一個接口
BookService
,方法爲Book getBook(int bookId)
,我們只需調用getBook(21)
並返回一個Book
對象。
我想說明的一點是,BookService
是一個定義良好的接口,在那裏你(作爲程序員)可以很容易地看到,它期望的參數是一個標識符,它會返回一個Book
對象。使用「僅REST」,我們訪問某個URL,並且返回任意數據。沒有明確定義的接口,您不知道如何在不知道服務器內部URL信息的情況下如何構建URL,並且您必須「手動」解析XML(希望使用XSD)。
另一件事。我提到了書籍和作者。
當使用接口時,您可以只有BookService
返回Book
s和AuthorService
返回Author
s。 A Book
可能有一個屬性authorId
,你可以通過調用Author getAuthor(int authorId)
得到一個Author
對象。
使用REST時,您可以調用書籍URL並返回有關作者的一些信息,包括作者鏈接。然後,您可以按照鏈接獲取有關作者的更多信息。但是,您如何知道究竟在哪裏找到這個鏈接?和以前相同的問題出現了:如何構建鏈接,我如何知道如何解析返回數據?
當混合兩者時,可能會發生奇怪的事情。如果我想通過id得到一個Book
,我可能會調用BookService
(內部轉換爲REST調用),並獲得一個很好的Book
對象。但是,如果我想獲得作者信息,我有這String authorLink
,我必須遵循以獲得我的Author
對象。但相反,當我的出發點是Author
並使用AuthorService
檢索它時,我得到作者寫入的指向書對象的字符串(URL)集合的鏈接。
那麼爲什麼REST會考慮API?爲什麼我應該比REST更好地定義(Java)接口?我如何混合兩者?
那你最終會一起去? – bryanmac