2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Typescript】APIのPOSTとGETを間違えた!!

Last updated at Posted at 2025-02-27

APIって知ってる?

特定のURLに「これほしい!!」とか「これやって!」とか言ったら情報がもらえたり、いろいろ処理してくれるやつのことだよ!!

とっても大雑把に解説すると、
「これほしい!!」をGET通信
「これやって!!」をPOST通信
と言って僕はそれを間違えてしまったんだ😣

背景

今回はRaycastというランチャーアプリの拡張機能を作ろうとしたんだ。(ドキュメントもしっかり整ってるからやってみたい人はやってみてね!)

そこで業務効率化の名目でTodoistTogglというサービスをいい感じに連携した拡張機能を作ってたところ。。。

スクリーンショット 2025-02-27 21.29.00.png

やっちゃった🥴

スクロールバーがこれほど小さくなるほどのオーガナイゼーションができちゃった🥴

Togglの拡張機能はあったので、それのapiをそのまま使ってたはず、、、(もしかしたら自分で書いてたかも)と思ってたのですが、急いで改修したので今となっては原因コードは不明、、、
(Togglの拡張機能↓)
https://github.com/raycast/extensions/blob/f10c4edbb993ac8a552eb0d84fb1f7df9a2e0538/extensions/toggl-track/README.md

TogglのAPI Documentを見る限り

fetch("https://api.track.toggl.com/api/v9/organizations", {
  method: "POST",
  body: {"name":"string","workspace_name":"string"},
  headers: {
	"Content-Type": "application/json",
	"Authorization": `Basic ${base64.encode(<email>:<password>)}`
  },
})
.then((resp) => resp.json())
.then((json) => {
  console.log(json);
})
.catch(err => console.error(err));

これをやってしまったんだろうなぁ、、、
本来なら自分のオーガナイゼーションの一覧を取得したいので、

fetch("https://api.track.toggl.com/api/v9/me/organizations", {
  method: "GET",
  headers: {
	"Content-Type": "application/json",
	"Authorization": `Basic ${base64.encode(<email>:<password>)}`
  },
})
.then((resp) => resp.json())
.then((json) => {
  console.log(json);
})
.catch(err => console.error(err));

こっちを叩くべきだったのに、、、

解決策

まあやってしまったもんはしゃーない!
と泣きながら反転術式を組みます。

ToggleAPIのドキュメントを見るとorganizationIDさえわかれば削除できるっぽいので、

1.GET通信で自分のユーザーのorganizationの一覧を取得
2.ループで全部削除!

この順番で組んでいくよ!

 const base64encode = (str: string) => {
    return Buffer.from(str).toString("base64");
  };
  
const deleteAction = async () => {
// Organization一覧の取得
      const organizations: any = await fetch("https://api.track.toggl.com/api/v9/me/organizations", {
        method: "GET",
        headers: {
        "Content-Type": "application/json",
        "Authorization": `Basic ${base64encode(`${togglApiToken}:api_token`)}`
        },
      })
      .then((resp) => resp.json())
      .then((json) => {
        return json;
      })
      .catch(err => console.error(err));
// 削除
      for (const organization of organizations) {
        const createdDate = new Date(organization.created_at)
        console.log(organization.created_at, createdDate.getFullYear());
          if (createdDate.getFullYear() === 2025) {
                fetch(`https://api.track.toggl.com/api/v9/organizations/${organization.id}/users/leave`, {
                method: "DELETE",
                headers: {
                "Content-Type": "application/json",
                "Authorization": `Basic ${base64encode(`${togglApiToken}:api_token`)}`
                },
              })
              .then((resp) => resp.json())
              .then((json) => {
                console.log('delete', json);
              })
              .catch(err => console.error(err));
          }
      }
      
  }
deleteAction();

これでresponseがstatus200になったら成功!!
今回は2025年に作られたやつは全部対象だったのでわかりやすかった。。。
あとは実行して変なの消さないように拝むだけ!
もしOrganization作りすぎちゃった!って人がいたら使ってね!

「ピューッとやってぴょいっ」とまでは行かなかったけど、手動でやるよりかはこっちの方が断然早いし楽、、、、

2
0
1

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?