Help us understand the problem. What is going on with this article?

大学では教えてくれないAPIの話:WebAPIの使い方・作り方

いきさつ

Web系やスマホアプリにおいて,サーバサイドならAPIを作成,フロントならAPIを呼び出す操作が必要になるかと思います.
しかし,大学の授業等でAPIに関する解説がなく,自分で調べることになりました.
後輩が同じような苦労をせずに済むように記事にまとめます.

用語説明

詳細については,もっと詳しくわかりやすい記事がたくさんありますので調べましょう.

API とは

APIとは、あるコンピュータプログラム(ソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のこと。

出典:APIとは - IT用語辞典 e-Words

実際には,他のプログラムを呼び出すための呼び出し口(=境界面)を指してAPIという言葉が用いられる場合が多いように感じます.
(例:××のAPIを呼ぶ,など)

また,APIにもいろいろあるでしょう.
外部のプログラムを呼び出すと言っても,

  1. 何を呼び出すのか(ライブラリ,外部サーバ上のアプリケーション,etc)
  2. どのようなルール(プロトコル)で呼び出すのか

などの点で様々な種類があります.

例えば,Python向けの機械学習ライブラリscikit-learnを呼びだすAPIや,
API Reference — scikit-learn 0.21.3 documentation

Twitterに投稿されたデータにアクセスするためのAPI,
TwitterのAPIについて - Twitter Help Center

Qiita上のデータを参照するためのAPIだって存在します.
Qiita API v2ドキュメント - Qiita:Developer

WebAPI とは

APIのうち,サーバ上のデータやプログラムを,HTTP(今時はHTTPS)プロトコルを用いて呼び出すものを指します.
(このプロトコルは,Webサーバとやりとりするためのプロトコルですね)
返るデータは,JSON形式である場合が多いように思います.

WebAPIの使い方・作り方

話を簡単にするため,ここではWebAPIに対象を絞って用い方を記します.

使い方(呼び出し方)

例として,Qiita APIのうち認証なしで利用できるものを使います.
例えばユーザデータを取得する場合,上記のドキュメントには,ホストqiita.comGET /api/v2/users/:user_idせよとあります.:user_idの部分はQiitaのIDで置き換えます.
具体的には,私のユーザデータを取得する場合,次のようにします.

  • curlコマンド
$ curl -L qiita.com/api/v2/users/ryhoh
{"description":"学部4年生.求職中.\r\n何でも屋さん.表向き,専門は機械学習ってことになってる.","facebook_id":"","followees_count":1,"followers_count":5,"github_login_name":"ryhoh","id":"ryhoh","items_count":6,"linkedin_id":"","location":"","name":"","organization":"関西大学 総合情報学部 総合情報学科","permanent_id":286106,"profile_image_url":"https://avatars3.githubusercontent.com/u/16788328?v=4","team_only":false,"twitter_screen_name":null,"website_url":""}
  • JavaScript
<script>
fetch('https://qiita.com/api/v2/users/ryhoh')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(JSON.stringify(myJson));
  });
</script>

(JavaScriptはほとんどわからないので Fetch を使う - Web API | MDN を参考に作成)

正直,確認するだけならブラウザで開いでも見える(HTTPSだし).

また,データの送信を目的にPOSTメソッドを用いる場合もありますが,その場合も似たような形で行えるため省略します.

作り方

アクセスされたらcontentsとしてHello world!を返すだけのAPIです.

  • PHP
index.php
<?php

header('Content-Type: text/html; charset=UTF-8');

$res = [
    'contents' => 'Hello world!',
];

print json_encode($res, JSON_PRETTY_PRINT);

ターミナルでphp -S IPアドレス:ポート番号として実行し,そこにブラウザでアクセスするか,上記の方法で呼び出してあげれば,返ってきたデータを見ることができるかと思います.

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away