お試し 技術

REST APIを自作してみる(その1)

仕事でREST APIにアクセスして情報を取得したり、情報を書き換えたりしたので
ちょっと自分でも作ってみたいなと思ったのでここでつまずいた点などを備忘録として残します
Node JSのインストールまでは調べて実施してください

それぞれの環境

サーバーサイド

OS : Ubuntu
言語 : JavaScript
サーバー : Node JS
データベース : MySQL

クライアントサイド

OS : Windows
言語 : C#(.NET Framework<ver:4.8>)

サーバーサイドのセットアップ

今回はNode JSのExpressフレームワークを使用して作成していきます
Expressは簡単にWebAPIを作成することができるものです
以下の手順で作成します

mkdir todoapp # プロジェクト用のフォルダ作成
cd todoapp # プロジェクトフォルダに移動
npm init # 以下は基本的にそのまま。必要に応じて適宜設定する

package name: (todoapp)
version: (1.0.0)
description:
entry point: (index.js) server.js
test command:
git repository:
keywords: node.js, express, jwt, authentication, mysql
author: bezkoder
license: (ISC)

# 今回使用するExpressをインストールする
npm install express mysql cors jsonwebtoken bc
ryptjs --save

# server.jsファイルを作成する
touch server.js

上記で作成したserver.jsファイル内は以下のようにしています
POSTメソッドでは送信されてきた内容をそのまま配列に格納しており、
GETメソッドでは配列に要素があればそれを返却するだけのものになります

const express = require("express");

app.get("/", (req, res) => {
  if(todos.length == 0) {
    res.json({ message: "要素がありません" });
  } else {
    res.json({ todosList: todos});
  }
});

app.post("/", (req, res) => {
  try {
    let todo = req.body.content;
    todos.push(todo);
    res.json({message: "Sucess" });
  } catch {
    res.json({message: "Failure" });
  }
});

// ポートを設定し、リクエストを受け取ります
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  
});

実際に動かす際のはまった点

上記ファイル内でポートを指定して起動しているのですが、Ubuntu上でファイアウォールを
有効化している場合は以下のコマンドを実行してファイアウォールを開けて下さい
ただ、セキュリティの穴となりますので注意が必要です

sudo ufw allow 3000

実際にサーバーに送信してみる

POSTメソッド用とGETメソッド用のそれぞれを作成します

public class PostData
{
    public string content { get; set; }
}

public async Task<string> GetServerMethod()
{
    HttpResponseMessage response = null;
    var request = new HttpRequestMessage(HttpMethod.Get, "送信先IPアドレス:3000");
    using(var client = new HttpClient())
    {
        response = await client.SendAsync(request);
    }

    return await response.Content.ReadAsStringAsync();
}

public async Task<string> PostServerMethod(string _content)
{
    HttpResponseMessage response = null;
    var postData = new PostData();
    postData.content= _content;
    var json = JsonConvert.SerializeObject(postData);
    var content = new StringContent(json, Encoding.UTF8, "application/json");
    var request = new HttpRequestMessage(HttpMethod.Post, "送信先IPアドレス:3000");
    request.Content = content;
    using (var client = new HttpClient())
    {
        response = await client.SendAsync(request);
    }

    return await response.Content.ReadAsStringAsync();
}

実際に実行した結果が以下になります
1行目はGETメソッドで取得しようとしますがまだ要素がないため、
2行目はPOSTメソッドで送信し、成功しています
3行目はGETメソッドで再度取得しており、配列の内容がきちんと取得できています

最後に

これで簡単なREST APIの作成はできました
今後は送信したデータをMySQLに保存できるようにします

-お試し, 技術
-, , ,