私はVert.xを使い慣れていて、そのデータをローカルファイルシステムのJSONファイルに保存する小さなREST APIを実装しようとしています。ファイルにCRUD操作を実行するVerticleを書く
これまでREST APIを実装していたのは、Vertxがその部分で非常によく文書化されているからです。
私が現在探しているのは、Vert.xでデータアクセスオブジェクトを構築する方法の例です。 JSONを含むテキストファイルに対して厳密な操作を実行できるVerticleを実装するにはどうすればよいですか?
私に例を教えていただけますか?何かヒント?
UPDATE 1:私は、次のことを考えていたファイルのCRUD操作で
。 に露出したRecords
というRESTリソースがあるとします。
私のHTTPサーバを起動する私のverticleには、私は以下のルートがあります。
router.get('/api/user/:userid/records').handler(this.&handleGetRecords)
router.post('/api/user/:userid/records').handler(this.&handleNewRecord)
ハンドラメソッドhandleGetRecords
とhandleNewRecord
はVERTXイベントバスを使用してメッセージを送信しています。
request.bodyHandler({ b ->
def userid = request.getParam('userid')
logger.info "Reading record for user {}", userid
vertx.eventBus().send(GET_TIME_ENTRIES.name(), "read time records", [headers: [userId: userid]], { reply ->
// This handler will be called for every request
def response = routingContext.response()
if (reply.succeeded()) {
response.putHeader("content-type", "text/json")
// Write to the response and end it
response.end(reply.result().body())
} else {
logger.warn("Reply failed {}", reply.failed())
response.statusCode = 500
response.putHeader("content-type", "text/plain")
response.end('That did not work out well')
}
})
})
そして、これらのメッセージGET_TIME_ENTRIES
またはCREATE_TIME_ENTRY
を消費し、別の垂直方向のがあります。私はRecords
のデータアクセスオブジェクトとして、この消費者の頂点を考える。この頂点は、すべてのユーザーレコードを含む指定された:userid
のファイルを読み取ることができます。記録
- することができますが、
- すべてのレコードを読み取る垂直方向のレコード
- がまたはすべてのレコード
を削除
vertx.eventBus().consumer(GET_TIME_ENTRIES.name(), { message ->
String userId = message.headers().get('userId')
String absPath = "${this.source}/${userId}.json" as String
vertx.fileSystem().readFile(absPath, { result ->
if (result.succeeded()) {
logger.info("About to read from user file {}", absPath)
def jsonObject = new JsonObject(result.result().toString())
message.reply(jsonObject.getJsonArray('records').toString())
} else {
logger.warn("User file {} does not exist", absPath)
message.fail(404, "user ${userId} does not exist")
}
})
})
私は何を達成しようとすると、私は上記のようにやったファイルを読み込み、(例えばList<Records>
)POJOにJSONをdeserialiseすることです。これは、VertxのJsonObject
で作業する方がずっと便利です。私はJsonObjectインスタンスを操作したくありません。
ファイルに対するCRUD操作は何を意味しますか? Vert.xには、非同期ファイル操作用のファイルシステムAPIがあります(探している場合)http://vertx.io/docs/vertx-core/java/#_using_the_file_system_with_vert_x – tsegismont
@tsegismontはあなたのフィードバックに感謝します。私はもっと正確にしようとしました。私の更新 – saw303