8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DenoAdvent Calendar 2019

Day 21

ky を Deno から使う

Last updated at Posted at 2019-12-20

Deno (ディーノ) Advent Calendar 21日目の記事です.

今日は ky というライブラリを Deno から使う話です.

ky とは

ky は HTTP client ライブラリです. HTTP client というと axios が有名ですが, Deno は XHR (XMLHttpRequest) オブジェクトを持たないため axios を使うことは出来ません. XHR ベースではなく fetch ベースの手軽な HTTP Client が ky です.

Deno から ky を使うには以下のように使います.

import ky from 'https://deno.land/x/ky/index.js';

const parsed = await ky.post('https://postman-echo.com/post', { json: { foo: true } }).json();

console.log(JSON.stringify(parsed, null, 2));
// => JSON output

(deno eval "上のコード" で実行できます.)

上の ky の例と同じ内容のリクエストを fetch で実行すると以下のようになります.

class HTTPError extends Error {}

const response = await fetch('https://example.com', {
  method: 'POST',
  body: JSON.stringify({ foo: true }),
  headers: {
    'content-type': 'application/json'
  }
});

if (!response.ok) {
  throw new HTTPError('Fetch error:', response.statusText);
}

const parsed = await response.json();

console.log(JSON.stringify(parsed, null, 2));
// => JSON output

promise を2回 await している点 (HTTP ヘッダーが帰ってきた時点と, レスポンス全体が帰ってきた時点で分けて promise を待っています) や, body が JSON であることを明示的に設定している点などが煩雑ですね. このような煩雑さを回避して, JSON を送って JSON を受け取るリクエストを自然に実行できる所に ky の手軽さがあります.

ts で使う場合の注意点

現在 ky はまだ ts に対応できていません. ts から使う場合は import した ky を一旦 any にキャストするか, 各自で適切に型付けする必要があります.

ky の Deno サポート

ky の Deno サポートはオフィシャルなものです. date-fns のケースと同様に Deno サポートをすることにほとんど労力はかけられていません. ky は Web 標準の fetch に依存していますが, Deno の fetch も Web 標準に準拠しているため, ky がそのまま Deno で動いたのでした.

Recap

今日は ky を Deno から使う方法を紹介しました. 明日は @nana4gonta さんの記事です.

8
4
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
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?