【Spring Boot】REST APIを作成する②(サンプルコードあり)

【Spring Boot】 REST APIを作成する② (サンプルコードあり) バックエンド
スポンサーリンク

はじめに

ぴんくうさぎ
ぴんくうさぎ

最近、Spirng Bootを勉強し始めたぞ!
APIってよく聞くけど、どうやって作るんだろう?

みどりがめ
みどりがめ

バックエンドエンジニアなら、APIの開発知識は
必須だよ!今回はサンプルコードを使用して
簡単なAPIを作成していくよ!

この記事で分かること
  • Spring BootでAPIを作成するための環境構築について
  • Spring Bootを使用したAPIの作成方法

作成するサンプルAPIについて

今回は下記のtopicsテーブルデータを取得(GET)、追加(POST)、更新(PUT)、削除(DELETE)する機能をもつAPIを作成していきます。
APIの動作確認には、無料で手軽に検証できるPostmanを使用していきます。現場でも比較的、よく使われるので、使用したことがない方は一度使用してみることをおすすめします。

idtitlecontent
1title1cntent1
2title2cntent2
3title3cntent3
4title4cntent4
5title5cntent5
6title6cntent6
topicsテーブル

作成手順概要

大まかな手順は以下の通りです。本記事は2記事に分かれており、本記事(2編)では下記、赤字部分が対象となります。
また、プロジェクトの作成やMySQL導入等の環境面については省略させていただきます。

  • 環境の確認、設定ファイルの作成
  • テーブルの作成、データの投入
  • Modelの作成
  • Controllerの作成
  • Serviceの作成
  • Repository(Mapper)の作成
  • 動作確認

第1編は下記よりご確認ください。

Serviceの作成

業務処理を行うサービスクラスは以下の通りです。
基本的にはRepositoryから取得したtopicをモデルに入れて、コントローラーに渡しているのみとなります。

@Service
@RequiredArgsConstructor
public class ApiSampleService {

    private final ApiSampleRepository apiSampleRepository;

    public ApiSampleModel findById(Integer id){
        return apiSampleRepository.findById(id);
    }

    public ApiSampleModel addTopic(String title,String content){
        ApiSampleModel model = new ApiSampleModel(title,content);
        apiSampleRepository.insertTopic(model);
        return model;
    }

    public ApiSampleModel updateTopic(Integer id,String title,String content){
        ApiSampleModel model = new ApiSampleModel(id,title,content);
        apiSampleRepository.updateTopic(model);
        return model;
    }

    public ApiSampleModel deleteTopic(Integer id){
        apiSampleRepository.deleteTopic(id);
        return findById(id);
    }

}

Repository(Mapper)の作成

Repository(Mapper)は以下の通りです。Mybatisを使用する関係で、@Mapperアノテーションを付与し、interfaceとしています。赤字のメソッド名と以降に記載するxmlファイルのidを紐づけます。

詳しい解説は下記の記事に記載していますので、必要に応じて参照ください。

@Mapper
public interface ApiSampleRepository {

    ApiSampleModel findById(Integer id);

    void insertTopic(ApiSampleModel model);

    void updateTopic(ApiSampleModel model);

    void deleteTopic(Integer id);
}

sqlを記載するxmlファイルは以下の通りです。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.apipractice.repository.ApiSampleRepository">

    <resultMap id="Api_Sample_Result_Map" type="com.example.apipractice.model.ApiSampleModel">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="title" property="title" jdbcType="VARCHAR"/>
        <result column="content" property="content" jdbcType="VARCHAR"/>
    </resultMap>

    <select id="findById" parameterType="int" resultMap="Api_Sample_Result_Map">
        select
        id, title, content
        from topics where id = #{id}
    </select>
    <insert id="insertTopic" useGeneratedKeys="true"
            keyProperty="id">
        insert into topics (title,content)
        values (#{title},#{content})
    </insert>
    <update id="updateTopic">
        update topics set
        title = #{title},
        content = #{content}
        where id = #{id}
    </update>
    <delete id="deleteTopic">
        delete from topics
        where id = #{id}
    </delete>
</mapper>

動作確認

ローカルでアプリケーションを起動してリPostmanでリクエストを投げます。

GET

localhost:8080/api-sample/3(GET)で送るとid3のトピックが取得できていることが分かります。

GET

POST

localhost:8080/api-sample/createTopic(POST)で送ると、新しいトピックが作成されます。
リクエストボディには登録したいtitle,contentをjson形式で記載します。

POST

PUT

localhost:8080/api-sample/3(PUT)で送るとid3のトピックが更新できていることが分かります。
リクエストボディには更新title,contentをjson形式で記載します。

PUT

DELETE

localhost:8080/api-sample/3(DELETE)で送るとid3のトピックが削除されます。

DELETE

DBで削除されていることを確認。

DB確認

終わりに

本記事はここまでとなります。第1編も是非併せてご確認ください。

ご覧いただきありがとうございました。ご指摘等がございましたら頂けますと嬉しいです。
引き続き、プログラミングについて定期的に発信していきますのでよろしくお願いします!
また、もしよろしければtwitterもフォローしていただけると嬉しいです!🐢

コメント