APIって何？みんなが使えるってどうやって？怖い…という昔の私をなだめる記事

私は大学院に入って初めてAPIという単語を認識したのですが、
周りは当然のように使っているのに自分はいくら調べてもよくわからなくて、パニックになって家で泣いてしまいました…

そんな昔の私、怖がらなくて、ええんやで！！あたいにまかせな！ジブリ見るぐらい落ち着いて聞きな！！

ということで、できるだけ専門用語は使わず、ざっくり「ふーん」そんなもんか。と思えるように気を付けて書いてみました。


##昔のわたしのざっくり理解
当時分からないなりに苦しみながら調べて分かったこと

* Application Programming Interfaceの略
* 中身を知らなくてもそれを使えるようになる手段を提供している何か

これぐらいしか分かりませんでした。
今思えばそれがすべてなのですが、当時は
>どうやって？何を使って？コードとか言語とかどうなってるの？Cでもできるの？てかネットワーク必要なの？無理分からんもうやだ！！

となっていました。
どこを見ても誤解が無いように書いているから総括したふんわりしたことしか分からず、結局何？？と。なるよね～…

ということで今回
誤解まみれにはなるかもしれませんが
他の説明記事が少しでも読みやすくなるための導入として使えるように、できる限り分かりやすく書いてみました。


##TwitterAPIとりあえず使ってみよう

具体例でみていきましょう。
###Twitterでつぶやくまでの流れ

普段Twitterでつぶやいてくださいと言われたら

* スマホにインストールされてるTwitter開いてツイート
* Google Chromeとかで「Twitter」って検索してログインしてツイート

のどちらかだと思います。
どちらもTwitter側が用意してくれたアプリなりサイトを使うことでツイートしています。

ですがAPIを使うと、
`一切あの青い鳥を見ることなくつぶやくことができる`んです。

ん？となりますよね。
一旦、普段のつぶやきの流れを見てみましょう。

>Twitterアプリを用いる場合
>１．Twitterアプリを開く
２．ツイート内容を書き込む
３．ツイートボタンを押す

私がやることは以上です。
ですが、Twitterアプリ側がこの後何をしているかというと

>４．Twitterアプリが、「このアカウントの人、この内容でつぶやきたいってよ～」というのを、Twitterのサーバーに言う
>５．Twitterのサーバが「OK！受け付けまーす！」といって情報を保存

これにより、自分のつぶやきをタイムラインで見れるようになります。

これから分かることは
>４．「このアカウントの人、この内容でつぶやきたいってよ～」というのを、Twitterのサーバーに言う

っていうのができれば、後はどんな方法でもつぶやけるんです。


でもどうやって？？？？
という疑問が残ると思います。

ここで肝になるのが、「サーバーリクエスト（Http Request）」という技術です。

###サーバーリクエスト

どうしても避けて通れない技術なので、すこーしだけ説明させてください。

これは一般的な技術で、基本どの言語でも可能と思っていただいて大丈夫です。
（言語ごとに、「HttpRequest　方法」でぐぐると出てくると思いますが、各言語でテンプレートのようなやり方があります。）


そしてこのサーバーリクエストは
サーバーに
>「～してください！」

とサーバーに注文することができる技術です。（名前そのままですね）

つまり、この技術を使えば
>４．「このアカウントの人、この内容でつぶやきたいってよ～」というのを、Twitterのサーバーに言う

ができる！ということです。

（もしサーバーが何なのかよくわからなければ、普通のPCだと思ってください。
なのでこの場合は、Twitterの総本家のPCに、この人この内容でつぶやきました～という報告を送っていると思ってもらえればいいと思います。）

そしてこのサーバーリクエストは必要な要素はだいたいどの言語でも一緒で

>サーバーの場所：URL
オプション　　 ：サーバーにやってほしいこと

を入力して実行すると、勝手にやってくれます。そういうものです。
例えば、GASだとこの一行でできちゃいます。

```go:GAS
UrlFetchApp.fetch(サーバーの場所, オプション);
```

なので、「サーバーの場所」と、「オプション」さえわかれば
あとは言語ごとの書き方に沿って入力することで
サーバーにリクエストを送ることができます。



さてここで、
「サーバーの場所」と、「オプション」って何…どうやって分かるの…？
となるのですが、そう！
`ここの書き方をTwitterが公開してくれているんです！！！！`
この公開してくれている、サーバーの場所とオプションを総称して、TwitterのAPIと思っていただいて大丈夫です。

そして、Twitter側は、「ツイート」する場合のAPIは
>サーバーの場所：https://api.twitter.com/1.1/statuses/update.json
オプション　　 ：メソッドはPOST、データにツイート内容入れてね

と言ってくれています。
ツイートする場合の[Twitter APIリファレンスページ](https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets)載せておきますので興味があれば見てみてください。
ふーん、分からん。で大丈夫です。

で、これをGASの書き方で書いてみたのが以下です。


```tweet.gs
  UrlFetchApp.fetch(
    'https://api.twitter.com/1.1/statuses/update.json',   //URL
    {
        method: 'post',　　//サーバーリクエストと共に「メソッド」と調べてみて
        payload: {
            status: 'Hello! from gas'  //ツイート内容
        }
    }
  );
```

（本当はこの前につぶやくアカウントとの連携したり、Twitterライブラリを使わないとできないのですが、説明を簡単にするためにごまかしています。）

##まとめると

`APIって、「サーバーの場所」と「オプション」の書き方`であって
それを使って`サーバーリクエスト（HttpRequest）`すると、そのアプリを使わなくてもアプリでやるのと同じことができる！

ということです。
今回は「ツイートする」という内容に対してのAPI紹介でしたが
ツイート検索した結果の取得や、リツイートなども、それぞれ別にAPIを提供してくださっているので、同じようにしてできます。

###どういう時に使いたくなるの？
なんとなくおわかりかもしれませんが
このAPIを組み合わせると、やりたいことが自由にできます！

例えば、「lilyという単語が含まれてるツイート全部リツイートしたい」
という場合、Twitterアプリとかを使うと手で検索して一つずつリツイートしていかないといけません。

それが、APIを使うと、コードさえ書いちゃえばすべて自動でできるようになります！
すごいですね！

###概念のAPI
そしてさらにいうのであれば、
APIという単語は、概念に近い意味でもしばしば使われます。
今回は「サーバーに何かしてもらうための方法」のように紹介しましたが、そうではなく
「ブラックボックスの何かを操作するために提供されている手段」
みたいな意味でも使われる単語でもあります。

なんとなーくわかるような？で大丈夫です。

###最後に
APIは今回のように無料で公開してくれているものもあれば、有料でないと使えないものもあったりと様々です。
「API　無料」で検索すると色々なものが出てきて、世の中なんでも好きなようにできるんだなーとなります。
いろーんな情報が自分で取得して使えるようになるんです。とっても楽しいものなんです。

みんな世の中難しく言い過ぎですよね。

この記事を読んだ後に他の「誤解がないように書いてある、抽象的に書かれている記事」が少し読みやすくなっていれば幸いです。
がんばりましょう。