Spring FrameworkでRestful APIを作成する方法

spring

Spring Frameworkで@RestControllerを使ってRestful APIを作成する方法を紹介します。

HTTPメソッドのGET、POST、PUT、PATCH、DELETEに対応したAPIを作っていきます。

[スポンサーリンク]

Restful API

APIのパスはGET、POST、PUT、PATCH、DELETEで全て同じものを使っています。ブラウザから呼び出す時にHTTPメソッドを変更しながらそれぞれのAPIを呼び出す設計です。

URLはどのAPIの全て「http://localhost:8080/api/v1/tickets/100」です。(POSTの時は末尾の100を付けたら動きません。)

v1はバージョン番号を現しています。

@PathVariable("id")を使ってパス内の動的に変わるIDのを取得していきます。

@RestController
@RequestMapping(value="api")
public class SampleController {

    @RequestMapping(value="/v1/tickets/{id}", method = RequestMethod.GET)
    public Map<String, String> get(@PathVariable("id") Integer id) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "get");
        map.put("id", id.toString());
        return map;
    }

    @RequestMapping(value="/v1/tickets", method = RequestMethod.POST)
    public Map<String, String> post() {
        Map<String, String> map = new HashMap<>();
        map.put("method", "post");
        return map;
    }

    @RequestMapping(value="/v1/tickets/{id}", method = RequestMethod.PUT)
    public Map<String, String> put(@PathVariable("id") Integer id) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "put");
        map.put("id", id.toString());
        return map;
    }

    @RequestMapping(value="/v1/tickets/{id}", method = RequestMethod.PATCH)
    public Map<String, String> patch(@PathVariable("id") Integer id) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "put");
        map.put("id", id.toString());
        return map;
    }

    @RequestMapping(value="/v1/tickets/{id}", method = RequestMethod.DELETE)
    public Map<String, String> delete(@PathVariable("id") Integer id) {
        Map<String, String> map = new HashMap<>();
        map.put("method", "delete");
        map.put("id", id.toString());
        return map;
    }
}

ツールを使ってAPIを実行する

ブラウザへURLを直張りしてもGETメソッドしか対応していないので、ツールを使ってGET、POST、PUT、PATCH、DELETEを呼び出すようにしましょう。

今回使ったツールはコチラです。Chromeのエクステンションになります。

こちらのツールはGET、POST、PUT、PATCH、DELETEメソッド全てに対応しています。

命名規則

APIの名前をつけるにあたり、こちらの命名規則を参考にさせてもらいました。
こちらのページによりますと、Rest ful APIの厳格なルールは命名規則以外にももっと色々とあるようなのですが、それは今後追加していこうと思います。

APIのパスとそれぞれの意味合いについては以下の通りです。

  • GET /tickets/100 : 指定したチケット 100 を取得
  • POST /tickets : 新しいチケットを作成
  • PUT /tickets/100 : チケット 100 を更新
  • PATCH /tickets/100 : チケット 100 を部分的に更新
  • DELETE /tickets/100 : チケット 100 を削除

サンプルソース

上記のロジックを使ったサンプルプロジェクトをコチラのGitHubで公開しています。

コチラはSpring Bootを使って動くプロジェクトです。

さいごに

Restful APIのパスの「tickets」部分ですが、1つのオブジェクトが参照/更新対象なのに複数形というのが違和感があったのですが、ルールとしては複数形が正しいようです。

またDBの論理削除は「PUT」を使うか「DELETE」を使うかという議論が色々なところで行われているみたいですね。自分の周りでは「DELETE」派が多いです。これはもう好みの問題なのでしょうか。

@RestControllerを使うだけのシンプルな作りですが、命名規則を意識するだけでだいぶそれっぽく様変わりしました。

APIにおいて命名規則は大事ですね!

それでは!