データをPOSTするときの疑問点を片付ける

はじめに

MongoDBを操作するためにアプリケーションサーバを作ることを目論んでVaporフレームワークに手を出したものの丸腰で挑んでいるため、諸々が足りず遅々として進んでいないまるですこんにちは。

先達方はスイスイと理解しているように見えるのですが、どうやってるんでしょうね?まぁ私はマイペースで行きます。ムチャはヨクナイ。

今回は疑問点を片付けます。

疑問点

どうやってJSONを渡すの?

まず真っ先にcurlでゴリゴリ書くのが思いつきます。が、そのような力技は1発2発ならば良いですが、継続的に使うには少々骨が折れます。そこで便利そうなサービスを探すわけですが、漁った結果Postmanを使うようになりました。

Postman API Platform

おすすめですと言いながら、インストールの方法や使い方は調べればたくさん出ていますのでそちらを見てください(丸投げ)。APIを扱う機能がほぼ網羅されているようです。ただ、私は当面GETとPOSTだけを使うことになりそうです。もっと使いこなせるようになりたい。

ついでにChromeでJSONを表示するときにはJSONViewという拡張機能を使うと見やすいです。

JSONVue - Chrome Web Store
Validate and view JSON documents

突然出てきたFutureって何者?

ざっくり言うと、非同期通信の仕組みで、まだ使えない(参照できない)オブジェクトを参照するためのものです。ちょっと自信ない。公式ドキュメントではdon't worryと書いていますが、未だにおっかなびっくり使っています。

APIを発行してデータが戻ってくるまで、大抵の場合はある程度時間がかかります。非同期通信の仕組みがなければ、APIを発行したらそのまま処理が完了してしまって、データが返されてもそれを取り扱うことができません。APIの発行と返ってきたデータが対応づかないイメージですかね。

Vaporフレームワークでは非同期通信をFutureで取り回すようになっています。フレームワーク側から指定されるので、使い所に悩まなくとも良いと思います。

Future.mapとは?

Swiftで使えるmapflatMapとは別物らしいです。配列をバラす方のmapflatMapは別途調べていただくとして(丸投げ)、FutureのmapFutureの値を別の値に分解するものです。

例えばAPIを発行してString型のデータを受け取るとき、Future<String>で受け取ることになります。そして受け取った後、String型のデータを取り出そうとするときにmapを使います。

要は、非同期通信で受け取った値(Future)から本当に必要な値を取り出すのに使うということですね。多分!

ちなみにflatMapの方は、入れ子のFuture(Future<Future<T>>)をバラすときに使うようです。入れ子のFutureって使うことがあるのかな?

Vapor ドキュメント
Vapors documentation (web framework for Swift).

まとめ

疑問点はひとまず解消できました。落ち着いてVaporを試していきましょう。
あとで修正するかもしれませんが。

公式ドキュメントもdon't worryと言っていますし、多分大丈夫でしょう。