REST APIを使ったWebサービスの実装開始!

Silicon Valley Super Ware

2020年6月4日


REST APIを使ったWebサービスの実装開始!

大体概要は話したと思いますので、今日から実際にREST APIを使ったWebサービスを 実装していきます。
まずは、Vue.jsのプロジェクトを作ってください! 或いは、5月に作成した「お問合せフォーム」のWebサービスに追加する方法でもOKです。
まず、最初に作るのは「投稿ページ」です。 基本的に、Webサービスを立ち上げた時に必要なデータを取得する方針なので サービスのトップレベルのモジュール「App.vue」で、REST APIを利用してデータを読み込んで しまう事にします。

モジュールが呼ばれた時に読み込みには「created」を使います。

App.vueのファイルの「script」のセクションに、「created」を追加して データを取り込みます。
実際の取り込みの処理はApp.vueでは行わずに、VUEX側で行うことで データ処理とUIを分離して作ります。

処理の流れは?

大まかの処理の流れを勘が手見ます。Webサービスが呼ばれると、トップレベルである App.vueが呼ばれて、「created」の処理が呼ばれます。ここで、VUEXに処理をまかせます。 具体的には、storeにある処理を呼び出します。
VUE UIでVUEXをインストールすると基本設定に必要なファイルを自動的に作ってくれます。 便利ですよね!「store」のフォルダーの下に作られた「index.js」がVUEXのstoreの実体です。
「index.js」の中に「Store」のオブジェクトが作られていて、
  • state
  • mutations
  • actions
  • modules
のセクション(ブロック)が用意されています。

stateがVUEXで管理するデータを置く部分です。

ここに、「投稿データ」「コメントのデータ」「ユーザー情報」を置いて管理する事にします。 データの初期化をこのセクションで行います。
state: {
   posts:[],
   comments:[],
   users:[],
}
「mutations」は「state」のデータを直接更新する処理を集めた場所です。 「actions」は更新の前の前処理を集めた場所で、非同期の処理はこの場所で 必要なデータを取得したあとに、mutationsの処理を呼び出すようにします。
REST APIを使って取得するデータは、Webサービスのプログラム以外のところ、 つまり、外部サービスを提供するサーバーが提供するもので、いつデータが届くかは あなたのWebサービスからは分かりません。このような処理をJavaScriptは非同期で 処理します。 簡単に一言で言えば、データのリクエストだけしておいて、データが届くまでは別の 仕事をするという事です。このような処理は、「actions」で行います。
  • mutations - データの更新を行う処理
  • actions - データの準備を行う処理
のように分けると分かり易いかと思います。

処理の呼び出し方

この「Store」オブジェクトの処理を呼び出すのは特別のやり方で呼び出します。
  • mutations - 「commit」を使って呼び出します
  • actions = 「dispatch」を使って呼び出します
英語の名前を見るともう少し詳しいイメージがつかめるかと思いますが、 mutationで使う、commitはデータを確定させる感じです。 actionsで使う、dispatchは、処理を行うという感じです。

まずは、Storeのstateのデータをセットする処理を準備します。
これは、「mutations」に入れます。

当面必要なのは、「投稿(posts)」「コメント(comments)」「ユーザー(users)」の データをセットする処理です。
mutations: {
   setPosts(state, payload) {
      state.posts = payload.posts;
   },
   setComments(state, payload) {
      state.comments = payload.comments;
   },
   setUsers(state, payload) {
      state.users = payload.users;
   }
}
これが、確定したデータを「state」のデータにセットするための処理です。 「payload」は、書式をシンプルにするために使っています。 処理によっては複数のデータを一つの処理でセットする場合がありますが、 渡すパラメータの数が増えないように「payload」にまとめて渡すための書き方です。 「payload」は、イメージとしては荷物のパッケージのようなイメージです。 いろいろな物を一つの箱に入れて、取り扱いやすくしているという感じです。

本命の「REST API」からのデータの取得

ここでようやく「本命」の処理、「REST API」からデータを取り込む処理です。 これは、「actions」で行います。「投稿」「コメント」「ユーザー」と3つのデータが ありますが、やり方は基本的に同じなので「投稿」を例にして説明します。

この処理は、先日紹介した「Postman」を利用するとサンプルコードが使えます

先日紹介した「Postman」を使うと、どんなコードを書けば「REST API」に必要な HTTPアクセスが出来るか簡単にわかります。 このコードをカット&ペーストして少し手直しすれば完成です!
JavaScriptの場合は、以下のコードが得られます
  • Fetchを使ったもの
  • jQuery (ajax)を使った物
  • XHRを使った物
これでも良いのですが、私が良く使うのは「axios」というモジュールです! Postmanではコードは作ってくれませんがとてもシンプルに記述できます。 VUE CLIで開発する場合は、「npm」でモジュールをインストールしてしまえば、 あとは、簡単に利用できます。 この辺りが、CDNではなく、「npm」ベースのCLIで開発する一番の理由です。
actions: {
   getPosts() {
      axios.get(url + "posts").then((res) => {
         this.commit("setPosts", { posts: res.data });
      }).catch((error) => {
         console.log(error);
         this.commit("setPosts",{posts: []});
      });
   }
},
このようにかなりシンプルに記述できます。データ取得のアクセスはHTTP GETメソッドで 特にデータを送る必要がないので、URLを渡すだけであとは、axiosがやってくれます。
非同期の処理の部分は、「then」の後のプロミス部分でデータが届いた時に処理されます。 エラーの場合は、空の処理をします。 この処理から先ほどの「mutations」の処理を「commit」を使って呼び出して、 データを確定させているというわけです。

最後に!

VUEX側の処理が出来たところで、この処理をApp.vueから呼び出します。
export default {
   created: function() {
      this.$store.dispatch("getPosts");
   },
};
この記述をApp.vueの「script」セクションに追加して、App.vueが呼び出された時に データを「REST API」を使って取得するというわけです。
今日は意外に沢山の事を説明しましたので、一つ一つやってみてください まだ、途中ですが今回のWebサービスの実装例をWebで公開しています。 とりあえず、リストの表示と一部の他の機能が利用できるようになっています。 まだ、CSSなどは書いていないのでとりあえず表示できるだけですが、 サービスのイメージを掴むのには良いかと思います。

途中経過の実装はこちら!
シリコンバレースーパーウエアでは、シンプルなWebサービスの作り方だけではなく、 より複雑なWebサービスをテーマにした講座も同時に提供しています。 さらに、作ったWebサービスを利用したビジネスの展開まで考えたWebサービスの 作り方がわかるようになります。

興味のある方は今すぐお問合せください!



またよろしければ、ニュースレターの登録をお願いします!大体週一回お届けしています。ブログよりは一歩踏み込んだもっと濃い内容を発信しています。


Copyright(c) 2020 by Silicon Valley Super Ware, all rights reserved.

コメント

このブログの人気の投稿

ユーザーインターフェースの設計

足し算以外もできるようにする

改良版足し算プログラム