私は同僚と話し合いました。彼は本当に REST をとても気に入っていますが、それでも私はその利点を確信する必要があります。
私の主な問題は、消費するアプリケーションの観点から、REST を API または一般的なインターフェースとして実際に見ていないことです。詳しく説明しましょう。RESTful API を使用して一方が他方を呼び出す 2 つのアプリケーションがあります。これは、JAX-RS と RESTeasy を使用して実装されます。ただし、RESTeasy を使用すると、インターフェースに基づいて REST クライアントを生成することも非常に簡単です。
では、本と著者を扱うシステムだとしましょう。アプリケーションは本について知る必要があり、すでに何らかの ID を知っていると仮定しましょう。
- REST では、たとえば を呼び出し
http://server/book/21、任意のペイロードを返し、それをBookオブジェクトに逆シリアル化します。 - RESTeasy クライアントを使用する
BookServiceと、メソッドとのインターフェースがありBook getBook(int bookId)、単に呼び出してオブジェクトgetBook(21)を返すだけです。Book
私がしようとしているポイントは、それBookServiceが明確に定義されたインターフェースであり、(プログラマーとして) 期待される引数が識別子であり、Bookオブジェクトを返すことを簡単に確認できることです。"just REST" を使用して URL にアクセスすると、任意のデータが返されます。明確に定義されたインターフェースがなく、サーバーからの内部 URL 情報を知らずに URL を構築する方法がわからず、XML を「手動で」解析する必要があります (できれば XSD を使用します)。
別物。私は本と著者に言及しました。
BookServiceインターフェイスを使用する場合は、返されるBookとAuthorService返される のみを持つことができますAuthor。ABookはプロパティを持つことができ、を呼び出すことauthorIdでオブジェクトを取得できます。AuthorAuthor getAuthor(int authorId)
REST を使用する場合、書籍の URL を呼び出すと、著者へのリンクなど、著者に関する情報が返されます。次に、リンクをたどって、著者に関する詳細情報を取得します。しかし、このリンクがどこにあるのかを正確に知るにはどうすればよいでしょうか? そして、以前と同じ質問が発生します: リンクを構築する方法、返されたデータを解析する方法を知るにはどうすればよいですか?
そして、2つを混ぜると、奇妙なことが起こる可能性があります. BookIDだけを取得したい場合は、 BookService(内部的に REST 呼び出しに変換される) を呼び出して、適切なBookオブジェクトを取得することができます。しかし、著者情報を取得したい場合はString authorLink、オブジェクトを取得するために従わなければならない this がありAuthorます。しかし逆に、開始点が であり、Authorを使用して取得すると、AuthorService書籍オブジェクトを指す文字列 (URL) のコレクションで、著者が書いた書籍へのリンクが取得されます。
では、なぜ REST が API と見なされるのでしょうか。適切に定義された (Java) インターフェースよりも REST を優先する必要があるのはなぜですか? そして、どうすれば2つを混在させることができますか?