Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

GoogleAppsScriptを使って無料で簡易APIを作成してみる

More than 1 year has passed since last update.

本記事はKIT AppDeveloper Advent Calendar 2015の6日目の記事です。

APIを作ったことがなくて難しそうという方

実際にはLinuxサーバを立ち上げて、公開する設定やらセキュリティなど色々考えなければならないことが多いと思います。
チュートリアル形式の本記事流れにそって作成していくことで、難しいことを考えることなく、無料かつ簡単にAPIを作成できます。

GoogleAppsScriptって何?

GoogleAppsScriptはGoogleSheets, Docs, Formsなどを使って、手軽にサーバサイドの環境を実行することができるサービスです。
詳しくは公式を見てください。
本記事の内容自体は公式のドキュメントなどを見ずにできる内容になっています。

1. APIの作成

GoogleDriveにアクセスして、新規 > Googleスプレッドシート でスプレッドシートを作成し
スプレッドシート > ツール > スクリプトエディタ でGoogleAppsScriptが作成できます。
開くとコード.gsというのがすでに作成されていると思うので、そこに下記のサンプルコードをコピペします。

簡単にコードの説明をすると、POSTメソッドはdoPost(), GETメソッドはdoGet()がそれぞれ受け取ります。
・doPost( ): timestamp,contentというデータを受け取り、スプレッドシートへ書き込みます。
・doGet( ): POSTされた最新のtimestamp,contentをjson形式で表示します。

※ SHEET_IDはスプレッドシートのURLhttps://docs.google.com/spreadsheets/d/xxx/edit#gid=0&vpid=A1xxx部分がIDになるので、自分の作成したものに置き換えてください。

コード.gs
var SHEET_ID = "xxx";

// データ更新
function doPost(e) {
  var params = JSON.parse(e.postData.getDataAsString());
  var timestamp = params.timestamp;
  var content = params.content;

  var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName("シート1");
  var sheetData  = sheet.getDataRange().getValues();
  sheetData.push([timestamp, content]);
  sheet.getRange(1,1,sheetData.length,2).setValues(sheetData);

  var result = {'response': 'sccess', 'data': {'timestamp': timestamp, 'content': content}};

  return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
}


// データ取得
function doGet(e) {  
  var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName("シート1");
  var sheetData = sheet.getDataRange().getValues();

  var timestamp = String(sheet.getRange(sheet.getLastRow(),1,1,1).getValue());
  var content = sheet.getRange(sheet.getLastRow(),2,1,1).getValue();

  var result = {'timestamp': timestamp, 'content': content};

  return ContentService.createTextOutput(JSON.stringify(result)).setMimeType(ContentService.MimeType.JSON);
}

2. APIの公開

先ほどサンプルコードを貼ったGoogleAppsScriptの公開 > ウェブアプリケーションとして導入をクリックし
・プロジェクトのバージョン: 新規作成
・アプリケーションにアクセスできるユーザー: 全員(匿名ユーザを含む)
と変更して「更新」を押します。
(初めての場合、許可するかどうか聞かれると思うので許可してください。)

すると、公開したURLが表示されると思うのでコピーしておいてください。
(再度、ウェブアプリケーションとして導入をクリックすることで、現在の公開URLを取得することもできます。)

3. APIの動作確認

今回はサンプルなのでコマンドラインからcurlを使ってAPIにGET,POSTで動作を確認します。

3-1. POST

下記のcurlコマンドでURLに対してDATAをPOSTします。

  • URL: 公開したURL
  • DATA: {timestamp: 現在時刻, content: "hoge"}
# `data "+%s"`で現在のUNIXタイムを取得することができます。
curl -X POST -d "timestamp="`date "+%s"`"&content=hoge" 公開したURL

するとスプレッドシートにデータが反映されていると思います。
スクリーンショット 2015-12-06 0.33.07.png

このように手書きで一行目のセルにデータのラベルを書いておくと、データの内容が何なのか分かりやすくなります。
スクリーンショット 2015-12-06 0.34.36.png

3-2. GET

下記のcurlコマンドでURLに対してGETします。

  • URL: 公開したURL
curl -L -X GET 公開したURL

すると、先ほどPOSTしたデータを取得することができます。

{"timestamp":"1449326663","content":"fuga"}

また、GETはウェブブラウザで公開したURLを開くことでも確認できます。

最後に。

実際に作成できたでしょうか?
簡易的なAPIなら、このように無料かつ簡単に作成することができます。
実際にある程度の規模になるとこのAPI作成方法では間に合わなくなりますが、個人アプリやサービスで試すぐらいなら問題なく動作すると思います。
ぜひ、サービス内で完結するだけではなくAPIなど外部と連携したものを作ってみましょう!

Why not register and get more from Qiita?
  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