48
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

KIT AppDeveloperAdvent Calendar 2015

Day 6

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

Last updated at Posted at 2015-12-05

本記事は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など外部と連携したものを作ってみましょう!

48
44
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?