
シェア:
Juliaは、チュートリアル、ガイド、実用的なリソースを作成することで、仲間の開発者に力を与えることに尽力しています。アウトリーチと教育のバックグラウンドを持つ彼女は、テクノロジーをより身近なものにし、開発者の経験全体を向上させることを目指しています。地域のコミュニティイベントでもよく見かける。
JavaでSMSウェブサービスを構築する
このサンプルは、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.
前提条件
始める前に、開発マシンにインストールしておく必要があるものがいくつかある:
プロジェクトの作成
まず、Gradleプロジェクトをセットアップし、Vonage Java SDKをダウンロードする必要があります。
プロジェクトを格納するディレクトリを作成する。このディレクトリの中で gradle init.
新しいGradleプロジェクトを作成する:
実行
gradle init --type=java-applicationコマンド選択
Groovyスクリプト言語として選択する
JUnit Jupiterテストフレームワークとしてデフォルトのまま
Project nameデフォルトのまま
Source package
Vonage Java SDKのインストール
次に build.gradleファイルを開き、依存関係ブロックに以下を追加する:
// Install the Vonage Java SDK
implementation 'com.vonage:client:6.4.0'さて、この build.gradleファイルを含むディレクトリでコンソールを開くと、実行できる:
このコマンドは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/javaと src/main/webapp.2行目は、Jettyサーブレットコンテナを使用してGradleから直接Webアプリを起動する機能を追加します!
次に、簡単のためにコンテキスト・パスを /に設定する。
次のブロックを build.gradle:
gretty {
contextPath = '/'
}走る gradle appRun(を実行します。 appRunを使うことに注意してください。 runを使うことに注意)。初回は依存関係をダウンロードするのに時間がかかります。
最終的にはこのように表示されるはずだ:
Jettyがあなたの(空の)ウェブサービスを実行しています。表示されたURLを起動して、実行されていることを確認してください。以下のようになるはずです:
Empty 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_KEYと VONAGE_API_SECRETを Vonage APIダッシュボード.に置き換える必要があります。 VONAGE_BRAND_NAMEをVonageの バーチャル番号.
注:一部の国(米国)では
VONAGE_BRAND_NAMEはVonageバーチャル番号の一つでなければなりません。その他の国(英国)では、英数字の文字列を自由に選ぶことができます(例えば、AcmeIncのようなブランド名など)。国別のSMS機能については 開発ポータル.
次に gradle appRun.すべてが正しくビルドされたら、次は Postmanを起動し http://localhost:8080/send-sms/にPOSTリクエストをしてみましょう。 messageと toを指定する:
Making a request with Postman
うまくいったでしょうか?これで、SMSメッセージを送信するためのRESTウェブサービスが構築できました!実際には、これをデプロイする前にもっとやりたいことがたくさんあるはずだ。認証を追加したり (そうしないと、誰でもあなたの Vonage API Account を使ってメッセージを送信できてしまいます!)、サービスに投稿するための素敵な Web フォームを作ったり、エラー処理を改善したり - でも、これは良いスタートです!