cURLからSwiftへ

curlコマンドを貼り付けると、同じリクエストをURLSessionで行うSwiftコードが出ます。

cURLからSwiftへの変換はブラウザ内でコマンドを解析します。トークンや資格情報が端末から出ることはありません。

APIクライアントを試す

cURLからSwiftへ について

APIのドキュメントはcurlで語り、iOSアプリはURLSessionで語ります。その間を手で訳す作業は単調で、ヘッダーの取りこぼし、JSONにすべきボディを文字列のまま残す、認証オプションを黙って落とすといった小さな間違いを招きます。この変換ツールはcurl自身と同じ流儀でコマンドを解釈し、メソッドを変えるフラグや資格情報をヘッダーに畳み込むフラグも扱い、Foundationだけで動くSwiftを出します。JSONボディは不透明な文字列ではなく、JSONSerializationに渡すSwiftの辞書になります。

機能

cURLからSwiftへ の使い方

  1. フラグとボディを含めてcurlコマンドを貼り付けます
  2. 右側に出るSwiftコードを読みます
  3. 訳せなかったフラグがないか警告を確認します
  4. コードをコピーするか.swiftとして保存します

入力

curl https://api.example.com/users -H 'Content-Type: application/json' -d '{"name":"Ada"}'

出力

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

メソッドはボディの有無から決まります。curlが判断するのと同じやり方です。

よくあるエラーとトラブルシューティング

よくある質問

生成されたSwiftはiOS、macOS、Linuxで動きますか。
動きます。FoundationのURLSessionを使い、AppleのプラットフォームでもLinuxのswift-corelibs-foundationでも利用できるため、同じファイルがサーバー側でもビルドできます。
完了ハンドラではなくasync/awaitのコードにできますか。
生成されるのは完了ハンドラ付きのデータタスクで、どこでも動きます。`let (data, response) = try await URLSession.shared.data(for: request)`に置き換えるのは一行の作業です。
JSONボディはどう扱われますか。
解析してSwiftの[String: Any]辞書として書き出し、JSONSerializationで符号化します。中身が読みやすく、エスケープされた文字列に触れずに値を変えられます。
-bのクッキーはどうなりますか。
リクエストのCookieヘッダーになります。URLSessionは独自のクッキー保存領域を持つため、設定によっては追加や上書きが起こる点にご注意ください。
curlコマンドはどこかへ送信されますか。
されません。解析もコード生成もブラウザ内で行われます。ドキュメントやログのcurlコマンドには本物のAPIキーが含まれることが多いため、これは重要な点です。

関連ツール

すべての ArrayKit ツール