curlがして結果を見たいだけのgoを書く時に役立つTips

# はじめに
こちらは「[Applibot Advent Calendar 2022](https://qiita.com/advent-calendar/2022/applibot)」8日目の記事になります.

# 概要
アプリボットでSREをやっています。
SREといいつつ、アプリケーションコードを書いているわけではないは恥ずかしいところですが、
社内プロジェクトでのgo言語採用も増えたこともあり、自身でも軽くスクリプトを書く際にもシェルスクリプト中心からgo言語へシフトしています。

今回はcurlを使ったスクリプトを作成したい時に便利だった、Postmanの[Code snippet](https://learning.postman.com/docs/sending-requests/generate-code-snippets/)機能の紹介をさせていただきます。


# ユースケース
弊社ではモニタリングを全てdatadogへ寄せています。
その中でlogsの集計結果をAPIから取得し、レポート的なのを手元で作成しようとした際の流れになります。

## 1.datadogのログ検索結果をAPIで取得
以下のようにログでリストを出しているが、その結果をAPIで取得したい。
SDK使ってという正攻法もあるが、一番簡単に結果取得できるのはこの方法。

![スクリーンショット_2022-12-08_2_15_53-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38286/b039fbfd-006f-04ac-b1b7-7cf1cb9cee69.png)

以下のように`DD_API_KEY`、`DD_APP_KEY`を設定すれば叩けるcurlコマンドをだしてくれる。
クエリもそのまま出してくれるので分かりやすくて嬉しい。

```
curl -X POST "https://api.datadoghq.com/api/v2/logs/analytics/aggregate" -H "Content-Type: application/json" -H "DD-API-KEY: ${DD_API_KEY}" -H "DD-APPLICATION-KEY: ${DD_APP_KEY}" -d @- << EOF
{"compute":[{"metric":"count","aggregation":"count","type":"total"}],"filter":{"query":"service:(fluentd OR game) @table:log_access   @log.path:\"/api/hoge\"","from":1669828193155,"to":1670432993155,"indexes":["*"]},"group_by":[{"facet":"@environment","limit":100,"sort":{"metric":"count","aggregation":"count","order":"desc","type":"measure"}}]}
EOF
```


↑を実行すると、以下のようなjsonのレスポンスが返ってくる。
```
{
    "meta": {
        "elapsed": 5,
        "request_id": "*****",
        "status": "done"
    },
    "data": {
        "buckets": [
            {
                "computes": {
                    "c0": 15
                },
                "by": {
                    "@environment": "dev**"
                }
            },
            〜 中略 〜
            {
                "computes": {
                    "c0": 1
                },
                "by": {
                    "@environment": "dev**"
                }
            }
        ]
    }
}
```

この結果が取れればやりたいことはできそう。
bashでこのまま書けばサクッとできそうだけど、goでやると`net/http`あたりだっけ・・・。
さてどうしようか、となったところ素敵なツールがありました。


## 2. Postmanでgo言語に変換
[Postman](https://www.postman.com/)というツールを使用します。

> What is Postman?
Postman is an API platform for building and using APIs. Postman simplifies each step of the API lifecycle and streamlines collaboration so you can create better APIs—faster.

弊社でもAPIテストツールとして普段から重宝しています。
今回はPostmanの[Code snippet](https://learning.postman.com/docs/sending-requests/generate-code-snippets/)機能を使用します。

まずAPIを登録。
datadogから`Copy as cURL`で取得したコマンドを見てみます。

```
curl -X POST "https://api.datadoghq.com/api/v2/logs/analytics/aggregate"
-H "Content-Type: application/json"
-H "DD-API-KEY: ${DD_API_KEY}"
-H "DD-APPLICATION-KEY: ${DD_APP_KEY}"
-d @- << EOF
{"compute":[{"metric":"count","aggregation":"count","type":"total"}],"filter":{"query":"service:(fluentd OR game) @table:log_access   @log.path:\"/api/hoge\"","from":1669828193155,"to":1670432993155,"indexes":["*"]},"group_by":[{"facet":"@environment","limit":100,"sort":{"metric":"count","aggregation":"count","order":"desc","type":"measure"}}]}
EOF
```

これをpostmanへ登録すると以下のようになります。

Headersタブに-Hオプションで指定しているヘッダーの登録（DD-API-KEY、DD-APPLICATION-KEYのVALUEには直接キーを入れてます）
![スクリーンショット_2022-12-08_3_34_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38286/84a3be59-8a6f-0d97-f42a-5e83500311bb.png)

Bodyタブに-dオプションの部分を入れる。
![スクリーンショット_2022-12-08_3_34_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38286/5a703668-84f1-bfa6-4dbe-10006af25f9c.png)

`Send`ボタンを押して結果が返って来ればOK。
![スクリーンショット_2022-12-08_3_52_57-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38286/301b61f4-8caf-ae84-2055-2557d5744a57.png)


Code snippetボタンを押すと以下のようにウィンドウが現れる。
※今回はGoを選択していますが、[様々な言語、フレームワークでの選択が可能](![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38286/dd4be9e9-57df-1356-0d46-f92ac2d1fc3e.png)です
)
![スクリーンショット_2022-12-08_4_02_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38286/23d617ba-47f7-f8bb-74fe-db02707f28cc.png)

一瞬でgoのコードが出来上がってしまいました。



# まとめ
軽いスクリプトを作る時、〇〇でのやり方はわかるけど、〇〇だとどう書くんだっけ・・・というのはあるあるかと思いますが、こういった機能でサクッと出せるのはとても助かる場面は多いのではないでしょうか。
最近話題のChatGPTでも、これ〇〇言語だとどう書くの？と聞いたら答えてくれる時代なので、いろいろなツールを駆使しつつ腕を磨いていけたらと思います。

以上,「[Applibot Advent Calendar 2022](https://qiita.com/advent-calendar/2022/applibot)」 8日目の記事でした.