開発者ドキュメント

Reactを使用してDigitalOceanAPIからデータを表示する方法

序章

過去数年にわたって、オープンソースのWebフレームワークは、アプリケーションのコーディングプロセスを大幅に簡素化しました。 たとえば、 React は、新しい開発者が言語にアクセスしやすくし、熟練した開発者の生産性を向上させることで、JavaScriptの人気を高めただけです。 Facebookによって作成されたReactを使用すると、開発者は、宣言ビュー、状態管理、クライアント側レンダリングなどの機能をサポートすることで、拡張性の高いWebアプリケーション用のハイエンドユーザーインターフェイスをすばやく作成できます。 JavaScriptのアプリ。

Reactなどのフレームワークを利用して、 DigitalOcean API からデータを読み込んで表示できます。これにより、HTTPリクエストを使用してDigitalOceanクラウド内のドロップレットやその他の製品を管理できます。 他の多くのJavaScriptフレームワークを使用してAPIからデータをフェッチできますが、Reactには、ライフサイクルやローカル状態管理などの便利な利点があり、ジョブに特に適しています。 Reactを使用すると、APIから取得したデータは、アプリケーションの起動時にローカル状態に追加され、コンポーネントのマウントとマウント解除時にさまざまなライフサイクルを経ることができます。 いつでも、ローカル状態からデータを取得して、それに応じて表示できます。

このチュートリアルでは、 DigitalOcean API v2 と対話して呼び出しを行い、ドロップレットに関する情報を取得する単純なReactアプリケーションを作成します。 アプリには、現在のドロップレットとその詳細(名前、地域、技術仕様など)を含むリストが表示され、フロントエンドフレームワークBootstrapを使用してアプリケーションのスタイルを設定します。

このチュートリアルを終了すると、次のようなスタイルのDigitalOceanドロップレットのリストを表示する基本的なインターフェイスが表示されます。

前提条件

このガイドを開始する前に、以下に加えて、DigitalOceanアカウントと少なくとも1つのドロップレットセットアップが必要です。

ステップ1—基本的なReactアプリケーションを作成する

この最初のステップでは、npmの Create ReactAppパッケージを使用して基本的なReactアプリケーションを作成します。 このパッケージは、モジュールビルダーWebpackやJavaScriptコンパイラBabelなど、Reactの実行に必要な重要な依存関係を自動的にインストールして構成します。 インストール後、Node.jsにプリインストールされているパッケージランナーnpxを使用してCreateReactAppパッケージを実行します。

Create React Appをインストールしてアプリケーションの最初のバージョンを作成するには、次のコマンドを実行して、 my-app アプリケーションに付けたい名前:

  1. npx create-react-app my-app

インストールが完了したら、新しいプロジェクトディレクトリに移動し、次のコマンドを使用してアプリケーションの実行を開始します。

  1. cd my-app
  2. npm start

上記のコマンドは、Create React Appによって提供されるローカル開発サーバーを起動します。これにより、ターミナルのコマンドラインプロンプトが無効になります。 チュートリアルを続行するには、次の手順に進む前に、新しいターミナルウィンドウを開き、プロジェクトディレクトリに戻ります。

これで、Reactアプリケーションの最初のバージョンが開発モードで実行されました。これを開くと表示できます http://localhost:3000 Webブラウザで。 この時点で、アプリにはCreateReactAppのウェルカム画面のみが表示されます。

Reactアプリケーションの最初のバージョンをインストールして作成したので、最終的にDigitalOceanAPIからのデータを保持するテーブルコンポーネントをアプリに追加できます。

ステップ2—液滴データを表示するコンポーネントを作成する

このステップでは、ドロップレットに関する情報を表示する最初のコンポーネントを作成します。 このコンポーネントは、すべてのドロップレットとそれに対応する詳細を一覧表示するテーブルになります。

DigitalOcean APIドキュメントには、cURLを使用して次のエンドポイントにリクエストを送信することで、すべてのドロップレットを含むリストを取得できると記載されています。 https://api.digitalocean.com/v2/droplets. このリクエストからの出力を使用して、以下を含むテーブルコンポーネントを作成できます。 id, name, region, memory, vcpus、 と disk ドロップレットごとに。 このチュートリアルの後半で、APIから取得したデータをテーブルコンポーネントに挿入します。

アプリケーションの明確な構造を定義するには、という新しいディレクトリを作成します。 componentssrc 作成したすべてのコードを保存するディレクトリ。 と呼ばれる新しいファイルを作成します Table.jssrc/components ディレクトリを作成し、nanoまたは任意のテキストエディタで開きます。

  1. mkdir src/components
  2. nano src/components/Table.js

次のコードをファイルに追加して、テーブルコンポーネントを定義します。

src / components / Table.js
import React from 'react';

const Table = () => {
  return (
    <table>
      <thead>
        <tr>
          <th>Id</th>
          <th>Name</th>
          <th>Region</th>
          <th>Memory</th>
          <th>CPUs</th>
          <th>Disk Size</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
        </tr>
      </tbody>
    </table>
  );
}

export default Table

上記のコードブロックはReactフレームワークをインポートし、と呼ばれる新しいコンポーネントを定義します Table、見出しと本文のあるテーブルで構成されます。

これらのコード行を追加したら、ファイルを保存して終了します。 nanoテキストエディタを使用すると、を押すことでこれを行うことができます CTRL+X、入力 y、を押します ENTER.

テーブルコンポーネントを作成したので、次はこのコンポーネントをアプリケーションに含めます。 これを行うには、ファイル内にあるアプリケーションのエントリポイントにコンポーネントをインポートします。 src/App.js. 次のコマンドでこのファイルを開きます。

  1. nano src/App.js

次に、CreateReactAppウェルカムメッセージを表示するボイラープレートコードを削除します。 src/App.js、これは次のコードブロックで強調表示されています。

src / App.js
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <p>
            Edit <code>src/App.js</code> and save to reload.
          </p>
          <a
            className="App-link"
            href="https://reactjs.org"
            target="_blank"
            rel="noopener noreferrer"
          >
            Learn React
          </a>
        </header>
      </div>
    );
  }
}

export default App;

ウェルカムメッセージを表示した行を削除した後、次の強調表示された行を追加して、この同じファイル内にテーブルコンポーネントを含めます。

src / App.js
import React, { Component } from 'react';
import Table from './components/Table.js';

class App extends Component {
  render() {
    return (
      <div className="App">
        <Table />
      </div>
    );
  }
}

export default App;

アクセスした場合 http://localhost:3000 Webブラウザーで再び、アプリケーションはテーブルヘッド付きの基本的なテーブルを表示します。

このステップでは、テーブルコンポーネントを作成し、このコンポーネントをアプリケーションのエントリポイントに含めました。 次に、DigitalOcean APIへの接続を設定します。これを使用して、このテーブルに表示されるデータを取得します。

ステップ3—APIクレデンシャルを保護する

DigitalOcean APIへの接続の設定は、個人アクセストークンを環境変数として安全に保存することから始まるいくつかのアクションで構成されます。 これは、 dotenv を使用して実行できます。これは、機密情報を .env アプリケーションが後で環境からアクセスできるファイル。

npmを使用してインストールします dotenv パッケージ:

  1. npm install dotenv

インストール後 dotenv、という環境ファイルを作成します .env 次のコマンドを実行して、アプリケーションのルートディレクトリに移動します。

  1. nano .env

以下をに追加します .env、パーソナルアクセストークンとDigitalOceanAPIのURLが含まれています。

.env
DO_API_URL=https://api.digitalocean.com/v2
DO_ACCESS_TOKEN=YOUR_API_KEY

この機密データがリポジトリにコミットされないようにするには、それをリポジトリに追加します .gitignore 次のコマンドでファイルします。

  1. echo ".env" >> .gitignore

これで、環境変数用の安全でシンプルな構成ファイルが作成されました。これにより、アプリケーションがDigitalOceanAPIにリクエストを送信するために必要な情報が提供されます。 APIクレデンシャルがクライアント側に表示されないようにするには、次に、アプリケーションサーバーとDigitalOceanAPIの間で要求と応答を転送するプロキシサーバーを設定します。

ミドルウェアをインストールします http-proxy-middleware 次のコマンドを実行します。

  1. npm install http-proxy-middleware

これをインストールしたら、次のステップはプロキシを設定することです。 を作成します setupProxy.js のファイル src ディレクトリ:

  1. nano src/setupProxy.js

このファイル内に、次のコードを追加してプロキシサーバーを設定します。

src / setupProxy.js
const proxy = require('http-proxy-middleware')

module.exports = function(app) {
  
  require('dotenv').config()

  const apiUrl = process.env.DO_API_URL
  const apiToken = process.env.DO_ACCESS_TOKEN
  const headers  = {
    "Content-Type": "application/json",
    "Authorization": "Bearer " + apiToken
  }

  // define http-proxy-middleware
  let DOProxy = proxy({
    target: apiUrl,
    changeOrigin: true,
  pathRewrite: {
    '^/api/' : '/'
  },
    headers: headers,
  })

  // define the route and map the proxy
  app.use('/api', DOProxy)

};

上記のコードブロックでは、 const apiURL = DigitalOcean APIのURLをエンドポイントとして設定し、 const apiToken = パーソナルアクセストークンをプロキシサーバーにロードします。 オプション pathRewrite プロキシサーバーをにマウントします /api それよりも / これにより、アプリケーションサーバーに干渉することはありませんが、DigitalOceanAPIと一致します。

これで、Reactアプリケーションから行われたすべてのAPIリクエストをDigitalOceanAPIに送信するプロキシサーバーが正常に作成されました。 このプロキシサーバーは、環境変数として安全に保存されているパーソナルアクセストークンがクライアント側に公開されていないことを確認します。 次に、アプリケーションのDropletデータを取得するための実際のリクエストを作成します。

ステップ4—DigitalOceanへのAPI呼び出しを行う

ディスプレイコンポーネントの準備が整い、DigitalOceanへの接続の詳細が保存され、プロキシサーバーを介して保護されたので、DigitalOceanAPIからのデータの取得を開始できます。 まず、次の強調表示されたコード行をに追加します src/App.js クラスを宣言する直前と直後 App:

src / App.js
import React, { Component } from 'react';
...
class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      droplets: []
    }
  }

	render() {
...

これらのコード行は、 constructor クラスコンポーネントのメソッド。Reactでは、以下を提供することでローカル状態を初期化します。 this.state 1つまたは複数のオブジェクトを使用します。 この場合、オブジェクトはドロップレットです。 上記のコードブロックから、ドロップレットを含む配列が空であり、API呼び出しの結果で配列を埋めることができることがわかります。

現在のドロップレットを表示するには、DigitalOceanAPIからこの情報を取得する必要があります。 JavaScript関数Fetchを使用して、DigitalOcean APIにリクエストを送信し、次の状態を更新します。 droplets 取得したデータを使用します。 あなたはこれを使用して行うことができます componentDidMount コンストラクターの後に次のコード行を追加することによるメソッド:

src / App.js
class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      droplets: []
    }
  }

  componentDidMount() {
  	fetch('http://localhost:3000/api/droplets')
  	.then(res => res.json())
  	.then(json => json.droplets)
  	.then(droplets => this.setState({ 'droplets': droplets }))
  }
...

ドロップレットデータをに保存します state、それは内でそれを取得する時間です render アプリケーションの機能と、このデータを prop テーブルコンポーネントに。 次の強調表示されたステートメントをのテーブルコンポーネントに追加します App.js:

src / App.js
...
class App extends Component {
  render() {
    return (
      <div className="App">
        <Table droplets={ this.state.droplets } />
      </div>
    );
  }
}
...

これで、APIからデータを取得する機能が作成されましたが、Webブラウザーを介してこのデータにアクセスできるようにする必要があります。 次のステップでは、テーブルコンポーネントにドロップレットデータを表示することでこれを実現します。

ステップ5—テーブルコンポーネントにドロップレットデータを表示する

ドロップレットデータをテーブルコンポーネントに転送したので、このデータをテーブルの行に対して反復処理できます。 ただし、アプリケーションは後にAPIにリクエストを送信するため App.js がマウントされている場合、 droplets 最初は空になります。 したがって、次のことを確認するためのコードも追加する必要があります droplets データを表示する前に空ではありません。 これを行うには、次の強調表示された行をに追加します tbody のセクション Table.js:

src / components / Table.js
const Table = ({ droplets }) => {
  return (
    <table>
      <thead>
        <tr>
          <th>Id</th>
          <th>Name</th>
          <th>Region</th>
          <th>Memory</th>
          <th>CPUs</th>
          <th>Disk Size</th>
        </tr>
      </thead>
      <tbody>
        { (droplets.length > 0) ? droplets.map( (droplet, index) => {
           return (
            <tr key={ index }>
              <td>{ droplet.id }</td>
              <td>{ droplet.name }</td>
              <td>{ droplet.region.slug}</td>
              <td>{ droplet.memory }</td>
              <td>{ droplet.vcpus }</td>
              <td>{ droplet.disk }</td>
            </tr>
          )
         }) : <tr><td colSpan="5">Loading...</td></tr> }
      </tbody>
    </table>
  );
}

上記のコードを追加すると、アプリケーションは Loading... ドロップレットデータが存在しない場合のプレースホルダーメッセージ。 DigitalOcean APIがDropletデータを返す場合、アプリケーションは各データ型の列を含むテーブル行に対してそれを繰り返し、結果をWebブラウザーに表示します。

注:Webブラウザにエラーが表示された場合 http://localhost:3000、 押す CTRL+C 開発サーバーを実行しているターミナルで、アプリケーションを停止します。 次のコマンドを実行して、アプリケーションを再起動します。

  1. npm start

この手順では、アプリケーションのテーブルコンポーネントを変更して、ドロップレットデータをWebブラウザーに表示し、ドロップレットが見つからない場合のプレースホルダーメッセージを追加しました。 次に、フロントエンドWebフレームワークを使用してデータのスタイルを設定し、視覚的に魅力的で読みやすくします。

ステップ6—ブートストラップを使用したテーブルコンポーネントのスタイリング

これでテーブルにデータが入力されましたが、情報は最も魅力的な方法で表示されていません。 これを修正するには、プロジェクトにBootstrapを追加してアプリケーションのスタイルを設定します。 Bootstrapは、CSSテンプレートを使用してプロジェクトにレスポンシブなスタイルを追加できるオープンソースのスタイリングおよびコンポーネントライブラリです。

次のコマンドを使用して、npmでBootstrapをインストールします。

  1. npm install bootstrap

Bootstrapのインストールが完了したら、次の強調表示された行をに追加して、CSSファイルをプロジェクトにインポートします。 src/App.js:

src / App.js
import React, { Component } from 'react';
import Table from './components/Table.js';
import 'bootstrap/dist/css/bootstrap.min.css';

class App extends Component {
...

CSSをインポートしたので、クラスを追加して、ブートストラップスタイルをテーブルコンポーネントに適用します。 table<table> タグを付ける src/components/Table.js.

src / components / Table.js
import React from 'react';

const Table = ({ droplets }) => {
  return (
    <table className="table">
      <thead>
...

次に、タイトルとDigitalOceanロゴが付いたヘッダーをテーブルの上に配置して、アプリケーションのスタイリングを終了します。 DigitalOceanのプレスページブランドアセットセクションでロゴのダウンロードをクリックして、ロゴのセットをダウンロードします。 SVG ディレクトリ(このチュートリアルでは DO_Logo_icon_blue.svg)、ロゴファイルをという新しいディレクトリにコピーしてプロジェクトに追加します。 assets 以内 src プロジェクトのディレクトリ。 ロゴをアップロードした後、強調表示された行をに追加してヘッダーにインポートします src/App.js:

src / App.js
import React, { Component } from 'react';
import Table from './components/Table.js';
import 'bootstrap/dist/css/bootstrap.min.css';
import logo from './assets/DO_Logo_icon_blue.svg';

class App extends Component {
...
  render() {
    return (
      <div className="App">
        <nav class="navbar navbar-light bg-light">
          <a class="navbar-brand" href="./">
            <img src={logo} alt="logo" width="40" /> My Droplets
          </a>
        </nav>
        <Table droplets={ this.state.droplets } />
      </div>
    );
  }
}

export default App;

上記のコードブロックでは、 nav タグは、Bootstrapからヘッダーに特定のスタイルを追加します。

Bootstrapをインポートし、そのスタイルをアプリケーションに適用したので、データは整理された読みやすい表示でWebブラウザーに表示されます。

結論

この記事では、セキュリティで保護されたプロキシサーバーを介してDigitalOcean APIからデータをフェッチし、ブートストラップスタイルで表示する基本的なReactアプリケーションを作成しました。 Reactフレームワークに慣れてきたので、ここで学んだ概念を、DjangoとReactでUbuntu18.04で顧客情報を管理するための最新のWebアプリケーションを構築する方法などのより複雑なアプリケーションに適用できます。 。 DigitalOcean APIで可能な他のアクションを知りたい場合は、DigitalOceanのWebサイトにあるAPIドキュメントを参照してください。

モバイルバージョンを終了