Spring Data RESTの紹介

Spring Data RESTの概要

1. 概要

この記事では、Spring Data RESTの基本を説明し、それを使用して単純なRESTAPIを構築する方法を示します。

一般に、Spring Data RESTはSpring Dataプロジェクトの上に構築され、HDRを駆動ハイパーメディアタイプとして使用して、Spring Dataリポジトリに接続するハイパーメディア駆動型REST Webサービスを簡単に構築できます。

通常、このようなタスクに関連する多くの手動作業が不要になり、Webアプリケーションの基本的なCRUD機能の実装が非常に簡単になります。

2. Mavenの依存関係

単純なアプリケーションには、次のMaven依存関係が必要です。


    org.springframework.boot
    spring-boot-starter


    org.springframework.bootspring-boot-starter-data-rest

    org.springframework.boot
    spring-boot-starter-data-jpa


    com.h2database
    h2

この例ではSpring Bootを使用することにしましたが、従来のSpringでも問題なく動作します。 また、余分なセットアップを避けるためにH2組み込みデータベースを使用することも選択しましたが、この例はどのデータベースにも適用できます。

3. アプリケーションの作成

ウェブサイトのユーザーを表すドメインオブジェクトを記述することから始めます。

@Entity
public class WebsiteUser {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String name;
    private String email;

    // standard getters and setters
}

すべてのユーザーには、名前と電子メール、および自動生成されたIDがあります。 これで、簡単なリポジトリを作成できます。

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends PagingAndSortingRepository {
    List findByName(@Param("name") String name);
}

これは、WebsiteUserオブジェクトを使用してさまざまな操作を実行できるようにするインターフェイスです。 また、特定の名前に基づいてユーザーのリストを提供するカスタムクエリも定義しました。

@RepositoryRestResourceアノテーションはオプションであり、RESTエンドポイントをカスタマイズするために使用されます。 これを省略することにした場合、Springは「/users」ではなく「/websiteUsers」にエンドポイントを自動的に作成します。

最後に、標準のSpring Boot main class to initialize the applicationを記述します。

@SpringBootApplication
public class SpringDataRestApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringDataRestApplication.class, args);
    }
}

それでおしまい! 現在、完全に機能するREST APIがあります。 実際の動作を見てみましょう。

4. RESTAPIへのアクセス

アプリケーションを実行し、ブラウザーでhttp://localhost:8080/に移動すると、次のJSONを受け取ります。

{
  "_links" : {
    "users" : {
      "href" : "http://localhost:8080/users{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile"
    }
  }
}

ご覧のとおり、利用可能な「/users」エンドポイントがあり、すでに「?page」、「?size」、および「?sort」オプションがあります。

アプリケーションメタデータを提供する標準の「/profile」エンドポイントもあります。 応答は、RESTアーキテクチャスタイルの制約に従う方法で構成されていることに注意することが重要です。 具体的には、統一されたインターフェイスと自己記述的なメッセージを提供します。 つまり、各メッセージには、メッセージの処理方法を説明するのに十分な情報が含まれています。

アプリケーションにはまだユーザーがいないため、http://localhost:8080/usersに移動すると、ユーザーの空のリストが表示されます。 curlを使用してユーザーを追加しましょう。

$ curl -i -X POST -H "Content-Type:application/json" -d '{  "name" : "Test", \
"email" : "[email protected]" }' http://localhost:8080/users
{
  "name" : "test",
  "email" : "[email protected]",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/1"
    },
    "websiteUser" : {
      "href" : "http://localhost:8080/users/1"
    }
  }
}

応答ヘッダーも見てみましょう。

HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Location: http://localhost:8080/users/1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked

返されるコンテンツタイプは「application/hal+json」であることがわかります。 HALは、API内のリソース間のハイパーリンクに一貫性のある簡単な方法を提供する単純な形式です。 ヘッダーには、新しく作成されたユーザーにアクセスするために使用できるアドレスであるLocationヘッダーも自動的に含まれます。

これで、http://localhost:8080/users/1でこのユーザーにアクセスできます。

{
  "name" : "test",
  "email" : "[email protected]",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/1"
    },
    "websiteUser" : {
      "href" : "http://localhost:8080/users/1"
    }
  }
}

curlまたはその他のRESTクライアントを使用して、PUT、PATCH、およびDELETE要求を発行することもできます。 また、Spring Data RESTはHATEOASの原則に自動的に従うことに注意することも重要です。 HATEOASはRESTアーキテクチャスタイルの制約の1つであり、APIを介した方法を見つけるためにハイパーテキストを使用する必要があることを意味します。

最後に、以前に作成したカスタムクエリにアクセスして、「test」という名前のすべてのユーザーを見つけましょう。 これは、http://localhost:8080/users/search/findByName?name=testに移動することによって行われます。

{
  "_embedded" : {
    "users" : [ {
      "name" : "test",
      "email" : "[email protected]",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/users/1"
        },
        "websiteUser" : {
          "href" : "http://localhost:8080/users/1"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/search/findByName?name=test"
    }
  }
}

5. 結論

[.iframe-fluid] ##このチュートリアルでは、Spring DataRESTを使用して単純なRESTAPIを作成するための基本を示しました。 この記事で使用されている例は、リンクされているGitHub projectにあります。