0
0

Dapr API から Spring Boot REST API にアクセスする (シンプル編)

Last updated at Posted at 2023-07-25

Dapr API から Spring Boot REST API にアクセスする (シンプル編)

こんにちは、@studio_meowtoon です。今回は、WSL Ubuntu 22.04 で Dapr ランタイムと Spring Boot アプリを連携する方法を紹介します。
spring-boot_with_dapr.png

目的

分散アプリケーションの為のランタイム Dapr の理解を深めます。

実現すること

Ubuntu の Docker 環境で Spring Boot アプリに Dapr API からアクセスするシンプルな例を実装します。

開発環境

  • Windows 11 Home 22H2 を使用しています。

WSL の Ubuntu を操作していきますので macOS の方も参考にして頂けます。

WSL (Microsoft Store アプリ版) ※ こちらの関連記事からインストール方法をご確認いただけます

> wsl --version
WSL バージョン: 1.0.3.0
カーネル バージョン: 5.15.79.1
WSLg バージョン: 1.0.47

Ubuntu ※ こちらの関連記事からインストール方法をご確認いただけます

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04

Java JDK ※ こちらの関連記事からインストール方法をご確認いただけます

$ java -version
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)

Maven ※ こちらの関連記事からインストール方法をご確認いただけます

$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.18, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64

Docker ※ こちらの関連記事からインストール方法をご確認いただけます

$ docker --version
Docker version 23.0.1, build a5ee5b1

Dapr ※ こちらの関連記事からインストール方法をご確認いただけます

$ dapr --version
CLI version: 1.11.0
Runtime version: 1.11.2

※ この記事では基本的に Ubuntu のターミナルで操作を行います。

作成する Web アプリケーションの仕様

No エンドポイント HTTPメソッド MIME タイプ
1 /api/data GET application/json
説明を開きます。

/api/data というエンドポイントに対して HTTP GET リクエストを送信すると、JSON データがレスポンスされるシンプルな Web サービスを実装します。

Hello World を表示する手順

Spring Boot アプリの作成

こちらの関連記事からご確認いただけます。

プロジェクトフォルダの作成

プロジェクトフォルダを作成します。
※ ~/tmp/hello-spring-dapr をプロジェクトフォルダとします。

$ mkdir -p ~/tmp/hello-spring-dapr
$ cd ~/tmp/hello-spring-dapr

アプリケーションクラスの作成

構成を単純にする為に全ての要素を記述しています。

$ mkdir -p src/main/java/com/example/springdapr
$ vim src/main/java/com/example/springdapr/Application.java

ファイルの内容

Application.java
package com.example.springdapr;

import java.util.Map;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
@RequestMapping("/api")
public class Application {

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

    @GetMapping("/data")
    public Map<String, String> getData() {
        Map<String, String> map = Map.of("message", "Hello World!");
        return map;
    }
}

pom.xml の作成

$ vim pom.xml

ファイルの内容

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.8</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>hello-spring-dapr</artifactId>
    <version>1.0</version>
    <name>hello-spring-dapr</name>

    <properties>
        <java.version>11</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

Spring Boot アプリだけで実行する

Java アプリをビルドします。

$ mvn clean package

アプリを起動します。
※ アプリを停止するときは ctrl + C を押します。

$ mvn spring-boot:run

別ターミナルからコマンドで確認します。

$ curl http://localhost:8080/api/data -w '\n'

出力

{"message":"Hello World!"}

ここまでの手順で、ターミナルに {"message":"Hello World!"} と表示され、JSON データを取得することが出来ました。

ここで、Spring Boot アプリを一旦停止します。

Dapr ランタイムを起動

Dapr ランタイムについては前回の記事でご確認いただけます。

Dapr バーション確認

$ dapr --version
CLI version: 1.11.0
Runtime version: 1.11.2

Dapr ランタイム起動

ここでは Spring Boot アプリのプロジェクトフォルダルートで実行しています。

この記事の例では、Dapr ランタイムが Docker で動作しています。この場合、Docker サービスの起動が必要です。

$ dapr run \
    --app-id hello-spring-dapr \
    --app-port 8080 \
    --dapr-http-port 3500 \
    -- java -jar target/app.jar
No オプション 説明
1 --app-id hello-spring-dapr Dapr ランタイムでのアプリの識別名
※ この例ではSpring Boot 側に特に設定ファイルは必要ありません。
2 --app-port 8080 Spring Boot アプリがリッスンするポート番号
3 --dapr-http-port 3500 Dapr ランタイムがリッスンするポート番号
4 -- java -jar target/app.jar Spring Boot アプリの jar ファイルを同時に実行します。

Dapr API から Spring Boot アプリにアクセスする

別ターミナルからリクエストします。

Spring Boot アプリの api/data エンドポイントを呼び出しています。

$ curl http://localhost:3500/v1.0/invoke/hello-spring-dapr/method/api/data -w '\n'

出力

{"message":"Hello World!"}

Dapr API から "Hello World!" が取得出来ました。

ここまでの手順で、Dapr ランタイム経由で Spring Boot アプリを起動し、 Dapr API から JSON データを取得することが出来ました。

まとめ

  • Spring Boot アプリの REST API を Dapr API 経由で呼び出すことが出来ました。
  • この記事の例ではまだ Spring Boot 側のアプリに Dapr への依存関係はありません。
  • 今後さらに Spring Boot から Dapr クライアントオブジェクトを操作する方法を学ぶ必要があります。

どうでしたか? WSL Ubuntu で Dapr ランタイムを使用した開発環境が手軽に構築できます。ぜひお試しください。今後も Ubuntu の開発環境などを紹介していきますので、ぜひお楽しみにしてください。

推奨コンテンツ

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0