https://a.storyblok.com/f/270183/1368x665/0aadfbb145/sms-web-java_24.png

JavaでSMSウェブサービスを構築する

最終更新日 July 8, 2021

所要時間:3 分

このサンプルは、JDK 11、Gradle 7.1、Gretty 3.0.5、Vonage Server SDK for Java v.6.4.0を使用してビルドしました。

Vonageの Vonage SMS APIは、世界中どこでもSMSメッセージを送受信できるサービスです。VonageはREST APIを提供していますが、私たちが書いたJava SDKを使う方がずっと簡単です。

あなたはすでに JavaでSMSメッセージを送る.このチュートリアルでは、それをさらに一歩進めて、Webサービスを構築します!

ソースコードは GitHub.

前提条件

始める前に、開発マシンにインストールしておく必要があるものがいくつかある:

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

プロジェクトの作成

まず、Gradleプロジェクトをセットアップし、Vonage Java SDKをダウンロードする必要があります。

プロジェクトを格納するディレクトリを作成する。このディレクトリの中で gradle init.

mkdir sms-webservice cd sms-webservice

新しいGradleプロジェクトを作成する:

  1. 実行 gradle init --type=java-applicationコマンド

  2. 選択 Groovyスクリプト言語として

  3. 選択する JUnit Jupiterテストフレームワークとして

  4. デフォルトのまま Project name

  5. デフォルトのまま Source package

Vonage Java SDKのインストール

次に build.gradleファイルを開き、依存関係ブロックに以下を追加する:

// Install the Vonage Java SDK
implementation 'com.vonage:client:6.4.0'

さて、この build.gradleファイルを含むディレクトリでコンソールを開くと、実行できる:

gradle build

このコマンドはVonage Java SDKをダウンロードし、後のために保存します。ソースコードがあれば、それをコンパイルすることもできますが、あなたはまだ何も書いていません。それを修正しましょう!

SMSを送信するWebサービスを構築する

小さなHTTPサービスを作って、Postmanでテストしてみよう。幸いなことに、Gradleはこれを比較的簡単にしてくれます。

まず、Grettyプラグインを build.gradleファイルに適用します。 pluginsブロックに追加します:

id 'war'
id 'org.gretty' version '3.0.5'

最初の行は、Gradle に War ファイルをビルドするように指示します。 src/main/javasrc/main/webapp.2行目は、Jettyサーブレットコンテナを使用してGradleから直接Webアプリを起動する機能を追加します!

次に、簡単のためにコンテキスト・パスを /に設定する。

次のブロックを build.gradle:

gretty {
    contextPath = '/'
}

走る gradle appRun(を実行します。 appRunを使うことに注意してください。 runを使うことに注意)。初回は依存関係をダウンロードするのに時間がかかります。

最終的にはこのように表示されるはずだ:

15:45:43 INFO Jetty 9.4.24.v20191120 started and listening on port 8080 15:45:43 INFO send-sms runs at: 15:45:43 INFO http://localhost:8080/send-sms Task :appRun Press any key to stop the server. <===========--> 87% EXECUTING [13s] :appRun

Jettyがあなたの(空の)ウェブサービスを実行しています。表示されたURLを起動して、実行されていることを確認してください。以下のようになるはずです:

Empty web pageEmpty web page

では、サーブレットを書いてみよう!という名前のファイルを作成する。 src/main/java/sms/webservice/SendSMSServlet.java.

package sms.webservice;

import com.vonage.client.VonageClient;
import com.vonage.client.VonageClientException;
import com.vonage.client.sms.MessageStatus;
import com.vonage.client.sms.SmsSubmissionResponse;
import com.vonage.client.sms.messages.TextMessage;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServlet;

public class SendSMSServlet extends HttpServlet {
    private String VONAGE_BRAND_NAME;
    private VonageClient client;

    public void init(ServletConfig config) {
        // Load configuration from the servlet container:
        VONAGE_BRAND_NAME = config.getInitParameter("from_number");
        String api_key = config.getInitParameter("api_key");
        String api_secret = config.getInitParameter("api_secret");

        client = VonageClient.builder().apiKey(api_key).apiSecret(api_secret).build();
    }

    protected void doPost(HttpServletRequest req,
                          HttpServletResponse resp)
            throws ServletException,
            java.io.IOException {
        try {
            // Extract form parameters from the request:
            String to_number = req.getParameter("to");
            String message = req.getParameter("message");

            TextMessage sms = new TextMessage(VONAGE_BRAND_NAME,
                    to_number,
                    message
            );

            SmsSubmissionResponse response = client.getSmsClient().submitMessage(sms);

            if (response.getMessages().get(0).getStatus() == MessageStatus.OK) {
                System.out.println("Message sent successfully.");

                resp.getWriter().println(response.getMessages().get(0));
            } else {
                System.out.println("Message failed with error: " + response.getMessages().get(0).getErrorText());
            }

        } catch (VonageClientException nce) {
            throw new ServletException(nce);
        }
    }
}

そして、サーブレット・コンテナでサーブレットを設定する必要がある。 src/main/webapp/WEB-INF/web.xml:

<web-app>
    <servlet>
        <servlet-name>send-sms</servlet-name>
        <servlet-class>sms.webservice.SendSMSServlet</servlet-class>
        <init-param>
            <param-name>from_number</param-name>
            <param-value>VONAGE_BRAND_NAME</param-value>
        </init-param>
        <init-param>
            <param-name>api_key</param-name>
            <param-value>VONAGE_API_KEY</param-value>
        </init-param>
        <init-param>
            <param-name>api_secret</param-name>
            <param-value>VONAGE_API_SECRET</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>send-sms</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

記入 VONAGE_API_KEYVONAGE_API_SECRETVonage APIダッシュボード.に置き換える必要があります。 VONAGE_BRAND_NAMEをVonageの 仮想番号.

注:一部の国(米国)では VONAGE_BRAND_NAMEはVonageバーチャル番号の一つでなければなりません。その他の国(英国)では、英数字の文字列を自由に選ぶことができます(例えば、AcmeIncのようなブランド名など)。国別のSMS機能については 開発ポータル.

次に gradle appRun.すべてが正しくビルドされたら、次は Postmanを起動し http://localhost:8080/send-sms/にPOSTリクエストをしてみましょう。 messagetoを指定する:

Making a request with PostmanMaking a request with Postman

うまくいったでしょうか?これで、SMSメッセージを送信するためのRESTウェブサービスが構築できました!実際には、これをデプロイする前にもっとやりたいことがたくさんあるはずだ。認証を追加したり(そうしないと、誰でもあなたのVonage APIアカウントを使ってメッセージを送信できてしまいます!)、サービスに投稿するための素敵なWebフォームを作ったり、エラー処理を改善したりすることも検討できるでしょう!

参考文献

シェア:

https://a.storyblok.com/f/270183/372x373/36054b72d0/julia-biro.png
Julia Biroデベロッパー・アドボケイト

Juliaは、チュートリアル、ガイド、実用的なリソースを作成することで、仲間の開発者に力を与えることに尽力しています。アウトリーチと教育のバックグラウンドを持つ彼女は、テクノロジーをより身近なものにし、開発者の経験全体を向上させることを目指しています。地域のコミュニティイベントでもよく見かける。