概要
REST APIアプリを作成し、DELETE通信を行う方法についてまとめた。
概要 これから数回にかけてREST APIについて学んだことを載せていく。 今回はREST APIの仕組みとプロジェクト作成方法について紹介する。 尚、RESTとは何かということについては取り扱わない。 仕組み[…]
事前準備
リソース削除用の処理と、リソース削除後の全リソース取得用の処理をサービスクラスに追加する。
サービスクラス
リソース削除用のdeleteメソッド、全リソース取得用のfindAllメソッドを追加する。
ResourceService.java
package com.example.rest_prototype.biz.service;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.stereotype.Service;
import com.example.rest_prototype.web.resources.Resource;
@Service
public class ResourceService {
/** DBの代わりに仮実装 */
private static Map<String, Resource> tmpDbMap = new ConcurrentHashMap<>();
/**
* 初期化(仮想DB)
*/
static {
var dto1 = new Resource("1", "りんご", LocalDate.of(2025, 2, 1));
var dto2 = new Resource("2", "ごりら", LocalDate.of(2024, 6, 5));
var dto3 = new Resource("3", "らっぱ", LocalDate.of(2023, 5, 10));
// 初期化
tmpDbMap.put(dto1.getId(), dto1);
tmpDbMap.put(dto2.getId(), dto2);
tmpDbMap.put(dto3.getId(), dto3);
}
/**
* IDに紐づくリソースを取得
* @param id
* @return
*/
public Resource find(String id) {
return tmpDbMap.get(id);
}
/**
* リソース登録
* @param resource
*/
public void create(Resource resource) {
tmpDbMap.put(resource.getId(), resource);
}
/**
* リソース更新
* @param resource
*/
public void update(Resource resource) {
tmpDbMap.put(resource.getId(), resource);
}
/**
* リソース削除
* @param id
*/
public void delete(String id) {
tmpDbMap.remove(id);
}
/**
* 全リソース参照
* @return
*/
public List<Resource> findAll() {
return new ArrayList<>(tmpDbMap.values());
}
}
基本的なDELETE通信
DELETEリクエストに紐づくハンドラメソッドをコントローラーに作成し、REST API クライアントから動作確認を行う。
コントローラー
クライアントから送信されたリソースIDをもとに、リソース削除を行う。
Rest04Controller.java
package com.example.rest_prototype.web.controller.rest04;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseStatus;
import com.example.rest_prototype.biz.service.ResourceService;
@Controller
public class Rest04Controller {
/** ロガー */
private static final Logger logger = LoggerFactory.getLogger(Rest04Controller.class);
/** ビジネスロジック */
@Autowired
private ResourceService service;
/**
* IDに紐づくリソースを削除する
* @param id
*/
@DeleteMapping(value = "rest04/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void delete(@PathVariable String id) {
// リソース削除
service.delete(id);
logger.info("★★更新結果★★");
for (var val : service.findAll()) {
logger.info("Resource: {}", val);
}
}
}
DELETEリクエストを受け付けるアノテーション。
レスポンスのHTTPステータスを「204(NO CONTENT)」に設定するアノテーション。
204ステータスは、リクエストは成功したが、レスポンスボディは返却しないという意味。
一般的に、PUT通信またはDELETE通信で返却される。
動作確認
サーバーを起動して、Talend API Testerを使用して動作確認を行う。
Talend API Testerの使用方法については以下を参照。
概要 GUIのツールを使用してシンプルにREAT APIアプリにリクエストを送りたいと思い、Talend API Testerを使用してみた。 いろいろと便利だったため、基本的な使用方法について簡単にまとめた。 事[…]
DELETEリクエスト送信
DELETEリクエストを送信し、204ステータスが返却された。

ログ出力内容は以下。
コンソールログ
★★更新結果★★
Resource: Resource(id=1, name=りんご, hogeDate=2025-02-01)
Resource: Resource(id=2, name=ごりら, hogeDate=2024-06-05)
まとめ
☑ @DeleteMappingを付与することで、DELETEリクエストを受け付ける
☑ @ResponseStatusで指定したHTTPステータスをレスポンスに指定できる
☑ HTTPステータス204は、「リクエストは成功したが、レスポンスボディは返却しない」という意味