kintone REST API について (共通事項編)

# はじめに

[前回の記事](https://qiita.com/RyBB/items/daabb9b60d804ee2242f) の続きです。

> **▼ 連載記事一覧**

> ||タイトル|
> |---|---|
> |0|[kintone環境の取得方法 (開発者ライセンス)](https://qiita.com/RyBB/items/73c50f1751ad137ba410)| 
> |1|[kintoneの使い方 (データベース編)](https://qiita.com/RyBB/items/daabb9b60d804ee2242f)| 
> |2|[kintone REST API について (共通事項編)](https://qiita.com/RyBB/items/8f6ca0a0e13d5fc42759) ← 本記事| 
> |3|[kintone REST API について (GET編)](https://qiita.com/RyBB/items/08cf511f1dbce6cf76bf)|
> |4|[kintone REST API について (POST編)](https://qiita.com/RyBB/items/94c13ca56887558bb227)|

今回はREST APIを使って、kintoneのデータを扱うための**共通事項**の説明をします！

# 共通事項

kintoneのデータを操作するためには、

* URI/URL
* メソッド
* ヘッダー (認証)
* リクエストパラメータ (GETの場合はURIに追記)

が必要になります。
これはkintoneだけでなく、いわゆる一般的なREST APIで必要な項目になります。

これらはすべて [cybozu developer network (devnet)](https://developer.cybozu.io/hc/ja/articles/201941754) に細かく記述されるけど、
ただ、ページがわかれていたりと初心者には難しいかもなので、
さらりと全体の概要をここで説明します！

## URI/URL

**kintoneの何のデータを扱うか** を示すものです。
例) **レコードを1件**操作したい / **レコードを複数件**操作したい / **アプリ自体**を操作したい

レコードを1件を操作する場合は、

```
https://(サブドメイン名).cybozu.com/k/v1/record.json
```

となります。他にも

```
// レコード複数件
https://(サブドメイン名).cybozu.com/k/v1/records.json

// アプリのフィーム情報
https://(サブドメイン名).cybozu.com/k/v1/app/form/fields.json
```

などあります！詳しくは上記のdevnetで！

### サブドメイン

サブドメインとはURLにあるこの部分です！
![image3.png](https://qiita-image-store.s3.amazonaws.com/0/153051/a3d327b3-e305-eff9-91ee-8b345cebde58.png)

## メソッド

これは **データをどうしたいか** 示すものです。
kintoneでは以下の4種類用意しています！

```
GET / POST / PUT / DELETE
(取得 / 新規登録 / 更新 / 削除)
```

## ヘッダー (認証)

**認証** や **リクエストパラメータで送るデータ形式** を示すものです。

kintoneでは

* ログインID/パスワード 認証
* APIトークン認証
* (セッション認証)

の3種類があります。
(セッション認証はブラウザのクッキーを利用するので暗黙的認証ですね)

### ログインID/パスワード認証

Webブラウザでkintoneへログインする際の「ID」と「パスワード」を以下のようにbase64でエンコードしたものを利用します。

```
// ID/パスワードが demo/password の場合、「demo:password」をbase64でエンコードしたものを利用します
'X-Cybozu-Authorization: ZGVtbzpwYXNzd29yZA=='
```

### APIトークン認証

アプリごとに発行できるトークンを使った認証です。
発行方法は、
![gif3.gif](https://qiita-image-store.s3.amazonaws.com/0/153051/44309553-e8d6-c9b5-84d5-7730fb1f81b0.gif)

トークンごとにどんな操作をさせるか制御させることもできます！
(使うメソッドに合わせてチェックをつけると良いですね！)
![image2.png](https://qiita-image-store.s3.amazonaws.com/0/153051/577d542a-8c66-41a8-f715-3a084a6d07a4.png)
※ <font color="red">**トークン発行後は必ずアプリの設定から更新をしてください！！**</font>

そしてAPIトークンを使った認証方法は、

```
'X-Cybozu-API-Token: 発行したAPIトークン'
```

と書きます。

また。GET以外のメソッドの場合、何かしらのデータを送るため、
その **送るデータの形式** を指定する必要があります。
データ形式については、ほとんどの場合 JSONを扱うと思うので、

```
'Content-Type: application/json'
```

で良いと思います！
※ GETの場合、URLにデータ(パラメータ)を載せるため必要ありません。

これらを組み合わせて、JSだと

```javascript

let headers = {
  'Content-Type': 'application/json',
  'X-Cybozu-API-Token': 'hogehoge',
}
```

とかよく書きますね。これがヘッダー部分です。

## リクエストパラメータ

**扱いたいデータの具体的な部分** を示します。
よくURIと混同されますが、あっちはアバウトです！(レコード1件！レコード複数件！とか)

こちらはもっと具体的な部分で、
レコード1件の操作であれば「**どの**レコード1件」か指定する必要があり、
さらにはそもそも「**どの**アプリの？」も必要です。

>現実世界でも一緒です！
>「おにぎり買ってきて！」と言われても、
>「どこで？」「何味？」となると思います。それと同じ


そしてこれは「使うURI、メソッドによって」変わってきます ← **ここ大事！！**

レコード1件を取得する場合、必要なパラメータは

* アプリID (どのアプリから？)
* レコードID (どのレコードを？)

となります。
アプリIDとレコードIDはレコードの詳細画面を開くとそれぞれURLに記載されています！
![image4.png](https://qiita-image-store.s3.amazonaws.com/0/153051/fab4268a-3177-fc62-3ba6-4c61ba826ca2.png)

なので、この例だと

* アプリID → 126
* レコードID → 1

となります。JSだと

```javascript

let params = {
  app: 126,
  record: 1,
}
```

とよく書きます。

# おわりに

以上がkintone REST APIの共通事項でした。
コマンドラインやJS、Pythonなどいろいろな方法でREST APIを実行する場合でも
これらは基本必要です！

次は 実際にkintoneのデータを取得する部分を説明します！

連載記事一覧

||タイトル|
|------------------|--------------------------------------|
|0|[kintone環境の取得方法 (開発者ライセンス)](https://qiita.com/RyBB/items/73c50f1751ad137ba410)| 
|1|[kintoneの使い方 (データベース編)](https://qiita.com/RyBB/items/daabb9b60d804ee2242f) | 
|2|[kintone REST API について (共通事項編)](https://qiita.com/RyBB/items/8f6ca0a0e13d5fc42759) ← 本記事 | 
|3|[kintone REST API について (GET編)](https://qiita.com/RyBB/items/08cf511f1dbce6cf76bf) |
|4|[kintone REST API について (POST編)](https://qiita.com/RyBB/items/94c13ca56887558bb227)|

それでは！≧(+･` ཀ･´)≦