LoginSignup
0
0

More than 3 years have passed since last update.

[メモ] Postman の OAuth 1.0a ヘルパーの encoding でまたハマる (pre-request script で回避)

Last updated at Posted at 2019-06-04

少し前に Runscope でも同じ問題に遭遇し、同様に Pre-request Scripts で回避する記事を書きました。
https://qiita.com/jrsyo/items/0fc6cc85e1af49dfbe21

今回はその Postman client 版です。よって説明はだいぶ省略しています。

Issue

概要は下記の issue の内容の通りです。
https://github.com/twitterdev/postman-twitter-ads-api/issues/2

Runscope と同様、POST の場合は代わりにリクエストボディを使うことで Postman でも回避できましたが、リクエストボディを使わない GET などの場合は Pre-request Script での対応が必要でした。

Pre-request Script (Postman)

下記に置いてます。これを対象のリクエストの Pre-request Script にまるっと貼り付けて使います (+ 当該リクエストの Authorization TYPE を Inherit => No Auth に変更)。
https://github.com/twitterdev/postman-twitter-ads-api/blob/master/scripts/pre-request.js

Runscope よりもデフォルトで使えるライブラリが限られていたので少し冗長になってます。
参考: Postman Sandbox | Commonly used libraries and utilities

その他 Postman pre-request script について

今回 Postman client の pre-request script を初めて利用しましたが、ドキュメントに記載がない独自の専用メソッドやそのオプションが多数あり、これらを使うことで面倒な処理を減らすことができました。
参考までに、下記の Postman Collection SDK のドキュメントが結構役に立ちました。
https://www.postmanlabs.com/postman-collection/index.html

上記のドキュメントは Node.js の SDK モジュールをベースに説明していますが、一部の Class は Postman client 単体からもアクセスが可能です。

意外だったのは、Postman では最近まで (prior to v7.0.9) pre-request を使った request header の改変が出来なかったようで、最新バージョンでは

pm.request.headers.add()
pm.request.headers.upsert()
pm.request.headers.remove()

を使って自由に request header を変更出来るようになっています。
参考: Cannot add headers with pm.request.headers.add #4631

今回は少なくとも Authorization: header を追加する必要があったため、上記の修正なしでは成り立ちません。

便利系

下記は現在定義されている Postman の Environment 変数一覧をオブジェクト形式で受け取る例です。
excludeDisabled: true を使うことで、disable になっている変数を除外することができます。
pm.environment.get("variable_key") で個別に値を取得することも可能ですが、毎回内部 API コールを行うよりは予めこのようにまとめて取得しておいた方がよいでしょう。

const env_variables = pm.environment.toObject({
    excludeDisabled: true
});

下記は現在リクエストに定義されている Query Params 一覧を受け取る例です。
前述同様、excludeDisabled: true を使うことで、disable になっているパラメーターを除外することができます。通常リクエストの params には required/optional 両方のパラメーターが混在していることが多いため、このオプションはとても役に立ちます。

* ただし受け取る値は単なる String なので、それぞれの parameter に何か処理を加えたい場合、SDK を読み込んで QueryParam.parse() を使うことで Array 形式で parameter を受け取れます (Array の各 index に paramter が key: パラメータ名, value: パラメータ値 の object が入っている)。

// 単純に query parameter を string で受け取る
const query_string = pm.request.url.getQueryString({
    ignoreDisabled: true
});

// query parameter を Array で受け取る
const sdk = require('postman-collection');
// https://www.postmanlabs.com/postman-collection/QueryParam.html#.parse
const query_string_array = sdk.QueryParam.parse(
    pm.request.url.getQueryString({
        ignoreDisabled: true
    })
);

その他にも、pm.request.* 系は頻繁に使われる定番系メソッドだと思います。リクエストの情報を取得(e.g., pm.request.method)するだけでなく、上書きも可能です (e.g., pm.request.url)。

宣伝

ということで、Twitter Ads API の Postman Collection を最近公開しました。下記からインポートできます。
https://github.com/twitterdev/postman-twitter-ads-api

0
0
0

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
0