Google Apps Scriptを使うと簡単にWeb APIを作ることが出来ます。
準備
まず、Google Drive上からApps Scriptを作れるようにしましょう。
ドライブの左上の「新規」ボタンを押すとメニューが開くので、「アプリを追加」

アプリの追加画面になりますので、右上の検索ボックスで「app script」と打ちます。
本当は、Apps Scriptなんですが、まあ気にしないでください。

一番上に、「Google Apps Script」が来ますので、「接続」を押します。

そして、ドライブの新規のメニューに「Google Apps Script」が表示されるようになります。

早速作ってみよう
ドライブの新規からGoogle Apps Scriptをクリックすると、「無題のプロジェクト」が開きます。
適当に名前を付けてください。日本語でOKです。

ここでは、西暦から和暦に変換するWeb APIを作ってみましょう。
ちょっと長いです。
var $GENGOLIST = [
{name: '令和', name_short: 'R', timestamp: '2019-05-01'},
{name: '平成', name_short: 'H', timestamp: '1989-01-08'},
{name: '昭和', name_short: 'S', timestamp: '1926-12-25'},
{name: '大正', name_short: 'T', timestamp: '1912-07-30'},
{name: '明治', name_short: 'M', timestamp: '1868-01-25'}
];
function doGet(e) {
if (!e.parameter.y || !e.parameter.m || !e.parameter.d) {
return createContent(
e.parameter.callback,
{result: false, response: 'パラメーターがセットされていません。'}
);
}
var y = e.parameter.y;
var m = e.parameter.m;
var d = e.parameter.d;
var n = new Date();
if (y < 1868 || y > n.getFullYear()) {
return createContent(
e.parameter.callback,
{result: false, response: 'yの範囲が正しくありません(1868〜現在年)'}
);
}
if (m < 1 || m > 12) {
return createContent(
e.parameter.callback,
{result: false, response: 'mの範囲が正しくありません(1〜12)'}
);
}
if (d < 1 || d > 31) {
return createContent(
e.parameter.callback,
{result: false, response: 'dの範囲が正しくありません(1〜31)'}
);
}
var t = new Date(y, m-1, d);
var i = 0;
var r;
var ry = 0;
var tt;
while(r = $GENGOLIST[i++]) {
ra = r.timestamp.split('-');
tt = new Date(ra[0],ra[1]-1,ra[2]);
if (t >= tt) {
ry = t.getFullYear() - tt.getFullYear() + 1;
if (ry == 1) {
ry = '元';
}
ry = r.name + ry;
break;
}
}
if (ry === 0) {
return createContent(
e.parameter.callback,
{result: false, response: '範囲が正しくありません(1968-01-25〜現在)'}
);
}
return createContent(
e.parameter.callback,
{result: true, response: ry + '年' + (t.getMonth()+1) + '月' + t.getDate() + '日'}
);
}
//JSONまたはJSONPの文字列を返します
function createContent(callback , obj ) {
if(callback) {
return ContentService.createTextOutput(
callback + '(' + JSON.stringify(obj) + ')'
).setMimeType(ContentService.MimeType.JAVASCRIPT);
}
else {
return ContentService.createTextOutput(
JSON.stringify(obj)
).setMimeType(ContentService.MimeType.JSON);
}
}
doGet(e)という関数が、Web APIのGETで実装になります。
e.parameterというオブジェクトがURLのパラメータの値を保持しています。
aaa?y=1988&m=4&d=22のようにアクセスされたとき、
e.parameter.y // 1998 e.parameter.m // 4 e.parameter.d // 22
という風に入ってきます。
また、JSONPにも対応するために、callbackというコールバック関数用のフィールドも持てるようになっています。
JSONなどの出力を返したいときは、
return ContentService.createTextOutput('JSON文字列').ContentService.MimeType.JSON;
doGetのreturnをしてやれば、JSONで返します。JSONPの時はMimeTypeがJAVASCRIPTになります。
これだとデバッグがしにくいので、最初はcreateContentは、
function createContent(callback , obj ) {
Logger.log(obj);
return '';
}
などとします。
テストを実行する関数を作ってこの関数を実行するようにします。
function myScript() {
var e = {
parameter: {
y: 1988,
m: 4,
d: 22
}
};
doGet(e);
}
こうすると、実行後、Ctrl+Enterでログが確認できます。
デプロイ
「公開」メニューから「ウェブアプリケーションとして導入」を選びます。

開いたダイアログで下記のように入力します。
「次のユーザーとしてアプリケーションを実行」は必ず「自分」を選んでください。
「アプリケーションにアクセスできるユーザー」は「全員(匿名ユーザーを含む)」を選んでください。
「次のユーザーとしてアプリケーションを実行」を自分にしないと、「アプリケーションにアクセスできるユーザー」に匿名ユーザーが現れません。ご注意ください。

すると、「現在のウェブ アプリケーションのURL」というのが出ますので、これをコピーしておきます。

実際に利用する
phpですと、
$y = 1988;
$m = 4;
$d = 22;
$json = file_get_contents('[現在のウェブ アプリケーションのURL]?y=' . $y .
'&m=' . $m . '&d=' . $d;
$data = json_decode($json);
print_r($data);
// 出力はこのようになります。
// stdClass Object
// (
// [result] => 1
// [response] => 昭和63年4月22日
//)
のように使います。[現在のウェブ アプリケーションのURL]は先ほどコピーしたURLです。
簡単にWeb APIが実装&実行できてしまいます。
お手軽な世の中ですね。
