Help us understand the problem. What is going on with this article?

Re:dashのAPI(検索/登録/編集/更新)をPHPでたたく

More than 1 year has passed since last update.

概要

PHPクライアントでググってみると一応あるにはあるがメンテされてないっぽいし、使いたいAPIについて機能がなかったので(登録、更新系のAPI)、自作してみた備忘録。

資料がほとんどなかったので、直接コードを読んだりしました。

以下から追う。

https://github.com/getredash/redash/blob/8b73a2b135aed8fcbca139380a959b9222ae0080/redash/handlers/api.py#L40

参考: https://qiita.com/ubonsa/items/9a7f4f1d020af88d70c4

追記

適当にまとめて公開しました。

https://github.com/sakatuki/redash-api-cli

composerから使えます。

# install
composer.json

{
    "require": {
        "sakatuki/redash-api-cli": "dev-master"
    }
}

# how to use
$queryId = 1;
$redashApiCli = new RedashApiClient(
    'https://your-redash',
    'your api key'
);
$apiQueries =  new RedashApiQueries($redashApiCli);
$data = $apiQueries->getQuery($queryId);

注意

以下で記しているのは実際に利用したコードではなく、そこから抽出したものなので、実行してみたらエラー出たりするかも。大筋では間違ってないので勘弁して。

利用してみるAPI

  • GET : /api/queries/search
  • POST: /api/queries
  • POST: /api/queries/{query_id}
  • POST: /api/queries/{query_id}/refresh

必要なもの

  • API Key
  • PHP環境
  • めげない心

認証編

API Keyやら実行環境やらを用意したらあとはコードを書くだけ!

認証には、getパラメータにapi_keyを含める方法と、リクエストヘッダに含める方法があるようです。

getパラメータに含める方は、単にapi_keyとして送ればok。

リクエストヘッダに入れて送る方法を調べてみると、サンプルコードは見つかったけど公式のドキュメントっぽいのがなかった。直接コードを読んだら以下のように送ればいいらしい。

$client = new \GuzzleHttp\Client(
    [
        'base_uri' => 'http://your-redash.jp/api/queries',
        'headers' =>[
            'Authorization' => 'Key yourapikey',
        ]
    ]
);
// 検索api
$client->get('/api/queries/search', [
    'query' => [
        'q' => 'hello wolod'
    ]
]);

検索編 - /api/queries/search

検索はqに検索したい文字列を入れれば良いよう。name(クエリタイトル)から検索してくれる。

$response = $client->get('/api/queries/search', [
    'query' => [
        'q' => 'hello wolod'
    ]
]);
// 中身はjson
echo $response->getBody();

登録編 - /api/queries

登録には/api/queriesへPOSTで送る。ちなみにこのapiにGETで送ると、閲覧できるクエリが全部返ってくるっぽい。

$response = $client->post('/api/queries', [
    'json' => [
        'name'  => 'hello wolod',
        'query' => 'select * from test',
        'data_source_id' => 1, // データソースのid
        'description' => 'クエリの説明',
        'schedule' => '12:00' // UTCで解釈され、ユーザーのTimeZoneで変換される
    ]
]);
// jsonで登録内容が返ってくる
echo $response->getBody();

ドキュメントがなかったのでわからないが、登録する際に他の内容も入れられるかも。ただis_draft(publishでないかどうか)のフラグだけは、固定でtrue(not publish)になるようだった。

編集 - /api/queries/{query_id}

内容の更新は上記へpostで送る。getで送ると単にクエリの内容が、deleteで送るとアーカイブされるっぽい。

4/9追記 : deleteメソッドで送ってみても、削除されなかった。削除したい時は、is_archivedをtrueで更新すれば削除される。

やりたかったのはpublish状態にすること(is_draft=falseの状態)。queryも更新できる。

$response = $client->post('/api/queries/' . $queryId, [
    'json' => [
        'id'  => $queryId,
        'query' => 'select * from test2',
        'is_draft' => false,
    ]
]);
// jsonで登録内容が帰ってくる
echo $response->getBody();

リフレッシュ(クエリの実行) - /api/queries/{query_id}/refresh

$response = $client->post('/api/queries/' . $queryId . '/refresh', [
    'json' => [
        'id'  => $queryId
    ]
]);
// jsonで登録内容が帰ってくる
echo $response->getBody();

まとめ

頑張ればコードから仕様を追える。最終的には、Redashのページを操作したときに出てくるリクエストを追うのが早かった(Redashの各操作はAPIを通して行われているようなので)。

ただレスポンスやリクエストが不明瞭なのがすごい辛い。ドキュメント欲しい。

そのうちその他のAPIもまとめて、composerで使える形にしてgithubにあげたい。

sakatukitukasa
最近はSREっぽいなにかをやってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした