Ruby のライブラリ Faraday を使って kintone の REST API を叩いてみる

RubyのHTTPクライアントライブラリ[Faraday](https://lostisland.github.io/faraday/)を使って、kintoneのAPIを叩いてレコードを取得したりしてみたときのメモです。

# はじめに

少し前に、Qiitaに[net/http を使って kintone の REST API を叩く](https://qiita.com/sy250f/items/82f84904daf7601eeb08)記事を書いたのですが、Ruby Gemsの HTTPクライアントライブラリ[Faraday](https://rubygems.org/gems/faraday/versions/0.17.0)がよく使われているらしいので、Faradayでもkintone REST API を叩いてみたいと思います。

# 動作環境

* mac OS10.14.6
* Ruby 2.6.3
* Homebrew 2.1.16
* rbenv 1.1.2
* Pry version 0.12.2 on Ruby 2.6.3
* faraday 0.17.0

macな方のRubyの環境構築は[こちら](https://qiita.com/sy250f/items/661e26a59b631740655f)を参考にしてください。

# faraday のインストール

Gemfileに追記 `gem 'faraday'`
`bundle install`

# faradayのテスト

```ruby
$ pry
[1] pry(main)> require 'faraday'
=> true
[2] pry(main)> response = Faraday.get 'https://api.openbd.jp/v1/get?isbn=978-4-87311-686-0&pretty'
[5] pry(main)> require 'json'
=> false
[14] pry(main)> JSON.parse(response.body)                                               => [{"onix"=>
   {"RecordReference"=>"9784873116860",
    "NotificationType"=>"03",
    "ProductIdentifier"=>{"ProductIDType"=>"15", "IDValue"=>"9784873116860"},
    "DescriptiveDetail"=>
     {"ProductComposition"=>"00",
      "ProductForm"=>"BZ",
      "Measure"=>
       [{"MeasureType"=>"01", "Measurement"=>"240", "MeasureUnitCode"=>"mm"},
        {"MeasureType"=>"02", "Measurement"=>"0", "MeasureUnitCode"=>"mm"}],
      "TitleDetail"=>
       {"TitleType"=>"01",
        "TitleElement"=>
         {"TitleElementLevel"=>"01",
          "TitleText"=>
           {"collationkey"=>"ウェブ エーピーアイ ザ グッド パーツ",
            "content"=>"Web API:The Good Parts"}}},
（省略)
```

# faraday でkintone API を叩くテスト

[API 一覧の取得]APIを叩いてみます。
https://developer.cybozu.io/hc/ja/articles/201941934

* HTTP メソッド: GET
* URI: https://(サブドメイン名).cybozu.com/k/v1/apis.json

コード

```apis.rb
require 'rubygems'
require 'bundler/setup'
require 'dotenv/load'
require 'faraday'
require 'pp'
require 'json'

url = "https://#{ENV['SUBDOMAIN']}.cybozu.com"
connection = Faraday.new(url: url)
response = connection.get '/k/v1/apis.json'
puts JSON.pretty_generate(JSON.parse(response.body))
puts response.status
puts response.success?
```

出力

```bash
$ ruby -w get_apps.rb
{
  "baseUrl": "https://{ドメイン名}.cybozu.com/k/v1/",
  "apis": {
    "app/acl/get": {
      "link": "apis/app/acl/get.json"
    },
    "app/acl/put": {
      "link": "apis/app/acl/put.json"
    },
    "app/customize/get": {
      "link": "apis/app/customize/get.json"
    },
    "app/form/fields/get": {
      "link": "apis/app/form/fields/get.json"
    },
    "app/form/layout/get": {
      "link": "apis/app/form/layout/get.json"
    },
    "app/get": {
      "link": "apis/app/get.json"
    },
    "app/settings/get": {
      "link": "apis/app/settings/get.json"
    },
（省略）
200
true
```

## Basic認証

コード

```apis_basic_auth.rb
require 'rubygems'
require 'bundler/setup'
require 'dotenv/load'
require 'faraday'
require 'pp'
require 'json'

url = "https://#{ENV['SUBDOMAIN']}.cybozu.com"
connection = Faraday.new(url: url)
connection.basic_auth(ENV['BASICAUTHID'], ENV['BASICAUTHPASS'])
response = connection.get '/k/v1/apis.json'
puts JSON.pretty_generate(JSON.parse(response.body))
puts response.status
puts response.success?
```

---
追記していきます。


# 参考リンク

* [faraday] https://rubygems.org/gems/faraday/versions/0.17.0
* [Ruby の HTTP クライアントライブラリ Faraday が便利そう] https://gist.github.com/mitukiii/2775321
* https://www.rubydoc.info/gems/faraday/0.17.0
* [Ruby HTTPクライアントの比較表] https://qiita.com/aosho235/items/559603ef98587ae4cfc1
* [Faradayの使い方 59のレシピ]http://nekorails.hatenablog.com/entry/2018/09/28/152745