APIドキュメントからモックサーバを立ち上げたい

APIドキュメント(API Blueprint)を記述するとモックサーバを立ち上げてくれるサービスがあります。 GitHubAPIドキュメントを管理したり、モックサーバのアクセスログが見えたりの中々の優れ物です。

提供されるモックサーバがRESTful APIで少々融通が効かないこと、外部のWebサービスなので場合によっては採用しづらいのが難点。

ただ、API BlueprintのテストツールやモックサーバはOSSで提供されているので、サービスを使わずに利用することも可能のようです

api-mockで手軽にモックサーバを立ち上げる

公開されているモックサーバがJavaだったりして、ちょっと入れづらいなぁと思っていたら、api-mockなるモジュールがあるようですね。これもAPI Blueprintからモックサーバをたち上げてくれるようです

API Blueprint形式のAPIドキュメントを用意する

API Blueprintは、Markdownを拡張した形式です。

API Blueprint詳細

こんな感じでMethod,URI,Request,Response等を記述していきます

FORMAT: 1A
HOST: http://example

# Nopaste

タイトルと本文を投稿します

## POST /api/nopaste

+ Request

    + Header

        Host: example

    + Parameters
        + title (required, string) ... タイトル
        + body (required, string) ... 本文

+ Response 201 (text/html)

    + Header

            X-Framework: Ark

    + Body

            {
                "result": {
                    "ok": 1
                }
            }

他にも幾つかAPIを記述しておきます sample.md

API Blueprintはちょっと癖があったり未整備な所もあるのですが、現時点での要求としては十分かなと思っています。

api-mockを入れる

nodeで書かれているのでnpmを使ってインストールします

npm install -g api-mock

実行

では早速実行してみましょう

$ api-mock sample.md --port 3001
Listening on port 3001

コマンドラインから叩いて確認してみます

$ curl http://localhost:3001/api/nopaste/1234
{
    "result": {
        "title": "Hello Nopaste",
        "body": "Text"
    }
}
$ curl -I http://localhost:3001/api/nopaste/1234
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: application/json
X-Framework: Ark
Content-Length: 83
Date: Fri, 11 Apr 2014 04:05:05 GMT
Connection: keep-alive

Headerに記述した"X-Framework: Ark"もちゃんと返ってきてますね

ドキュメントに記述した固定正常系のResponseしか返してくれませんが、それでもクライアントが サーバサイドの実装を待たずに疎通確認が出来るのはうれしいんじゃないかなと思っています

(このサンプルをApiary — Homeに持っていくとエラーになるんですが、統一感があるのでこちらの方がいいかなぁと…思っています)