LoginSignup
0
2

More than 1 year has passed since last update.

WebhookとAPIのちがい ~Kintone編~

Posted at

WebhookとAPIのちがい 

今回はWebhookとAPIの違いをやってくよ。

~おしながき~

  1. 前置き
  2. WebhookとAPIのちがい
  3. 使ってみる(Kintone)

前置き

とある日の出来事。

同僚「ISEYAくん、WebhookとAPIのちがいってなんなん?」
ISEYA「うーん、、コードを書かないか、書くかのちがいとちゃいますかね:baby:

そう、実際私は雑魚のためあまり腑に落ちていないので曖昧な表現で回答してしまいました。
しっかりと理解を深めるため、調べてみたが、
コードを書くか書かないかの違いは正解のようで不正解なようだ。

今日はそれを紹介していく。

WebhookとAPIのちがい

結論 自動か手動かのちがい

です。
じゃあ具体的に自動と手動ってどういう意味?について深堀していきます。

まず、APIの一例をシーケンス図にしてみました。
するとこんな感じ。

このようにクライアント側からHTTPリクエストを送信し、
サーバー側がレスポンスとしてクライアント側に返してくれます。

これはつまり野球に例えると、自分がボールを持っている状態で、
相手に投げた後ボールを投げ返してくれるみたいな感じ。
いわゆるキャッチボールをしている状態ですね。
当然ながら自分が相手にボールを投げないと相手は返してくれません。

対してWebhookはというとこのようなイメージ。

こちら側がボール(リクエスト)を投げることなくボール(レスポンス)が返ってきます。
ただし、レスポンスを受けるためには予めトリガーを設定しておく必要があります。

何かしらのイベントが起きたタイミングでレスポンスを返してもらうような感じです。
クライアント側でなにもすることがなくてもレスポンスをもらえるなんて便利ですよね。

このように自動なのか手動なのかを説明してきました。
最後にサイボウズ社kintoneを使った例を紹介して終わります。

使ってみる(Kintone)

Kintoneでは各アプリにWebhookを設定することができる。

スクリーンショット 2022-07-03 230029.png

Webhook用のURLを指定するだけでKintoneアプリのデータを送信できる。
トリガー(イベント)も様々。

対してAPIを使ってKintoneアプリのデータを受信するためには、
リクエストを投げることが前提となる。

KintoneAPI仕様書に則る必要がある。
Kintoneから外部にデータを流そうとすると、
各リファレンスに沿った形でコードを書いていくことが必要。

例としてAWS LambdaにAPIを使ってデータを投げているコードを紹介します。
これはKintone内で記述しているものなので、この場では不適切かもしれませんがご了承ください:nerd:

(function() {
  'use strict';
  kintone.events.on('app.record.index.show', function(event) {
  
    const url = '××××';
    const method = 'POST';
    const headers = {'Content-Type': 'application/json'};
    const data = {"value":event.records};
    
    kintone.proxy(url, method, headers, data)
    .then((args) => {
      console.log(event.records);
    }, (error) => {
      // error
      console.log(error); 
    });
  });
})();

こんな感じでコードを書く必要があります。
こうみるとやっぱりWebhookは最強だなと思います。

今回はこんな感じでオーしまい。では!

0
2
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
0
2