res2res - Jumeaux
Author: tadashi-aikawa
Description: Check difference between two responses of API.

コンテンツにスキップ

# res2res

APIから返却されたレスポンスを判定前に変換します。

##
json

レスポンスをJSONに変換します。
任意の変換ロジックを指定することができます。

### Config

#### Definitions

##### Root

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
transformer | Transformer | 変換処理 |  |
default_encoding | (string) | レスポンスヘッダにエンコーディング情報が無い場合の出力エンコーディング | euc-jp | utf8
when | str | 条件式 |
    '"2" in req.path'

whenで指定できるプロパティ

Template表記に対応しています。
プロパティは以下を使用できます。

key | Type | Description
--- | --- | ---
req | Request | リクエスト情報
res | Response | レスポンス情報

##### Transformer

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
module | string | 変換処理のあるモジュールのパス | sample.module |
function | (string) | 変換処理の関数 | bytes2json | transform

functionのインタフェース

functionで指定した関数のインタフェースは`(bytes, str) -> str`となる必要があります。
以下は実装の一例です。

    def transform(anything: bytes, encoding: str) -> str:
        return json.dumps({
            "wrap": load_json(anything.decode(encoding))
        }, ensure_ascii=False)

#### Examples

##### `sample`モジュールの`transform`関数を使ってjsonに変換する

      res2res:
        - name: json
          config:
            transformer:
              module: sample

##### `sample`モジュールの`bytes2json`関数を使ってjsonに変換する

      res2res:
        - name: json
          config:
            transformer:
              module: sample
              function: bytes2json

##### pathにjsonを含む場合だけ`sample`モジュールの`transform`関数を使ってjsonに変換する

      res2res:
        - name: json
          config:
            transformer:
              module: sample
            when: '"sample" in req.path'

##
json_sort

JSONレスポンスの並び順をソートします。

処理がスキップされるケース

`content-type` が `text/json` や `application/json` でない場合はレスポンスがJSONでないとみなされ処理がスキップされます。

### Config

#### Definitions

##### Root

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
items | Sorter[] | ソート設定のリスト |  |
footprints_tag | (string) | 本アドオンで結果が変わったときに足跡として追加するタグ名 | sorted |

##### Sorter

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
when | str | 条件式 |
    "qs.id.0 == 1"
targets | Target[] |  |  |

when

jinja2の表現を利用できます。
プロパティはrequestで定義されたものを使用できます。

##### Target

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
path | string | ソート対象となるプロパティの正規表現 | root<'dict1'><'list1-1'> |
sort_keys | (string[]) | pathで指定したプロパティがObjectだった場合のソートプロパティリスト | `[id, name]` |

`sort_keys`が未指定の場合

指定プロパティの値でソートします。Objectの場合はJson Encodeした結果でソートします。

#### Examples

##### pathが`/filter`である場合 `dict1.list1-1` のリストをソートする

      res2res:
        - name: json_sort
          config:
            items:
              - when: "path == '/filter'"
                targets:
                  - path: root<'dict1'><'list1-1'>

##### pathが`/filter`である場合 `list2` のリストをid, nameの優先順にソートする

      res2res:
        - name: json_sort
          config:
            items:
              - when: "path == '/filter'"
                targets:
                  - path: root<'list2'>
                    sort_keys: [id, name]

##
type

レスポンスのtypeを変更します。
typeはJumeauxのアドオンや連携先アプリケーションでファイル形式を判定するために使用されます。

### Config

#### Definitions

##### Root

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
conditions | Condition[] | 変更値と条件 |  |

##### Condition

Key | Type | Description | Example | Default
--- | --- | --- | --- | ---
type | str | 変更後のtype | json |
when | str | 条件式 |
    "res.status_code == 200"

whenで指定できるプロパティ

Template表記に対応しています。
プロパティは以下を使用できます。

key | Type | Description
--- | --- | ---
req | Request | リクエスト情報
res | Response | レスポンス情報

#### Examples

##### pathに`target`という文字列が含まれる場合に`json`へtypeを変更する

      res2res:
        - name: type
          config:
            conditions:
              - type: json
                when: "'target' in req.path"