API 概要


はじめに

API(主にREST)と前提知識となるWebの概要について

Web

現在、APIデータのフォーマットの主流はJSON

前提としてWebに関係が深い用語説明

HTTP
  通信のためのルール(プロトコル)
リソース
  Web常に存在する名前を持ったあらゆる情報
URI現在APIの
  リソースを識別するID 場所+名前 (URLは場所のみ)がわかる
  WebサイトはブラウザからHTTPでサーバーにアクセスしHTTPでURIを取得し表示する
  例 お天気情報(名前) https://weather.yahoo.co.jp(場所)
HTML
  Webで表示するための文書フォーマット

URI

URI構文


①URI スキーム
通信手段 (http or https)がほとんど

②ホスト名
  ドメイン名orIPアドレス どの住所か〜

③ポート番号
  TCPポート番号 どのドアか〜

④パス
  ディレクトリのパス どこの部屋のどこのタンスのどこの引き出しの〜

⑤クエリパラメータ
  名前=値形式の追加情報

⑥URIフラグメント
  Webページ内の位置 HTMLでidで設定するような

クールなURI設計

クールなURIを設計する上で抑えるべきポイント

プログラミング言語に依存した情報は含めない
   ファイル拡張子や大文字など
メソッド名やセッションIDを含めない
URIには「リソースを指す名詞」を使う
   動詞は使わない
なるべくシンプルかつ人間が読んで理解できる

URLの変更

301 Redirectを使って変更を知らせる
  変更前のURLにアクセスした人を自動的に新しいURLへ飛ばす

新しいURLを新規として扱うのではなく変更という形で扱うことにより信用情報も引き継がれSEO的にも良い

HTTP

TCP/IPの4階層モデル

HTTPはTCP/IP(インターネットの国際規格)がベースになっている
TCP/IPは4つの階層により構成されている

アプリケーション層
  アプリケーションごとの通信プロトコルを決定する
トランスポート層
  データ転送の抜け漏れをチェックする
  送られたデータがちゃんと届いているか
インターネット層
  IPアドレスを割り当て通信を行う
  データを送る
ネットワークインターフェース層
  LANケーブルなど物理的な層

主要なHTTPメソッド

GET
  リソースを取得する
POST
  リソースの作成、リソースへのデータの追加
PUT
  リソースの更新(リソース対象が存在しなければ新規作成)
  A⇒Bへ値を変更する処理は何回実行してもBのままなのでべき等
DELETE
  リソースの削除
HEAD
  リソースのヘッダー取得
OPTIONS
  リソースがサポートしているメソッドの取得(このリソースにはGETとPUTしかできませんよ〜)

APIの操作

json-server(jsonファイルをAPIサーバーのリソースと見立てAPIを作るパッケージ)をインストール

% npm install -g json-server

リソースの確認
今回はdb.jsonを使用する

% json-server --watch db.json

//結果
        Resources
        http://localhost:3000/hogehohe

        Home
        http://localhost:3000

HTTPメソッドを実行する

### GET
`curl -X GET "http://localhost:3000/hogehoge" -v`

### POST
`curl -X POST -H "Content-Type: application/json" -d '{"id": 4, "title": "ホゲホゲ"}' "http://localhost:3000/hogehoge" -v`

### PUT 
`curl -X PUT -H "Content-Type: application/json" -d '{"id": 4, "title": "ふーーー"}' "http://localhost:3000/hogehoge/4" -v`

### DELETE
`curl -X DELETE "http://localhost:3000/hogehoge/4" -v`