#:g1: rest-bindの紹介

Posted 2014-06-05 12:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の156日目です。

rest-bindとはなにか

 rest-bindは、Andy Bennett氏作のRESTなURIと関数をマッピングするユーティリティです。

パッケージ情報

パッケージ名rest-bind
Chicken eggs:rest-bind - The Chicken Scheme wiki

インストール方法

$ sudo chicken-install rest-bind

すれば、

(use rest-bind)

(require-extension rest-bind)

試してみる

 define-methodというフォームを利用してrestなURIを関数の引数の形式と対応できる、というのが主なところです。
define-methodといっても総称関数の方ではなく、このライブラリ独自のものです。
とりあえずなんの変哲もないウェブページを取得する場合は、

(define-method (call-cc.org)
  "https://www.call-cc.org/"
  #f
  (cut read-string #f <>))

(call-cc.org) ;=> "<!doctype html><html><head><title>CHICKEN Scheme</title><link rel='stylesheet' href='http://wiki.call-cc.org/chicken.css' type='text/css'><style>ul {text-align: left;}</style></head><body><div id='content'><center><img src='http://www.call-with-cur...

と書けます。

https://example.com/api/v2/a/b/c?foo=1&bar=2&baz=3

のような形式の場合で、返答がjsonで返ってくる場合

(use rest-bind http-client medea)

(define-method (a b c #!key foo bar baz) "https://example.com/api/v2/a" #f read-json)

のように書けます。ちなみにread-jsonは、rest-bindではなくmedeaで定義されているものです。

まとめ

 今回は、rest-bindを紹介してみました。
rest-bindを使って綺麗にマッピングできると気持ち良さそうです。
ちなみに、今回はchatworkで試してみた例を載せる筈でしたが、直にアクセスすると大丈夫なのにdefine-methodで包むと認証できず断念しました。
自分のChickenでのデバッグ能力の低さを実感…。

comments powered by Disqus