本文へ移動

CBOR ​

CBOR は、RFC 8949 で定義された、オブジェクトをシリアライズするためのバイナリ形式です。JSON と互換性があり、効率的なデータ交換を必要とするネットワーク通信や、IoT デバイスなどのリソースが限られた環境に適しています。

cbor2 パッケージを使って CBOR を返す例を示します。

ts
import { Hono } from 'hono'
import { createMiddleware } from 'hono/factory'
import { encode } from 'cbor2'

const app = new Hono()

declare module 'hono' {
  interface ContextRenderer {
    (content: any): Response | Promise<Response>
  }
}

const cborRenderer = createMiddleware(async (c, next) => {
  c.header('Content-Type', 'application/cbor')
  c.setRenderer((content) => {
    return c.body(encode(content))
  })
  await next()
})

app.use(cborRenderer)

app.get('/', (c) => {
  return c.render({ message: 'hello CBOR!' })
})

export default app

次のコマンドでレスポンスを確認できます。

plaintext
$ curl -s http://localhost:3000/ | hexdump -C
00000000  a1 67 6d 65 73 73 61 67  65 6b 68 65 6c 6c 6f 20  |.gmessagekhello |
00000010  43 42 4f 52 21                                    |CBOR!|
00000015

また、CBOR プレイグラウンドで JSON オブジェクトにデコードできることを確認できます。

plaintext
A1                           # map(1)
   67                        # text(7)
      6D657373616765         # "message"
   6B                        # text(11)
      68656C6C6F2043424F5221 # "hello CBOR!"
json
{ "message": "hello CBOR!" }

関連情報 ​

MIT ライセンスで公開されています。