KotlinのFuelでHTTP通信

    2018年、明けましておめでとうございます。
    制作部の花島です。

    今年もよろしくお願いいたします。

    2018年1発目はKotlinのFuelでHTTP通信のやり方を

    Googleの画像解析のVision APIを用いて説明します。

    概要

    1.build.gradleでFuelライブラリをインストール

    compile 'com.github.kittinunf.fuel:fuel-android:1.12.0'

    2.FuelでURL、Path、ヘッダー、リクエストパラメータを設定し実行

    コード

    //Vision APIのBase URLを設定
    FuelManager.instance.basePath    = "https://vision.googleapis.com/v1"
    //ヘッダーのcontent typeをJSONに設定
    FuelManager.instance.baseHeaders = mapOf("Content-Type" to "application/json")
    
    //Vision APIのエンドポイントを設定
    val path: String      = "images:annotate?key=API_KEY"
    //リクエストパラメータに渡す画像(Base64)
    val imgBase64: String = imgBase64
    //リクエストパラメータを設定
    val body: String =  "{" +
        "requests: [" +
            "{" +
                "image: {" +
                    "content: \"${imgBase64}\"" +
                "}," +
                "features: [" +
                    "{" +
                        "type: \"TEXT_DETECTION\"" +
                    "}" +
                "]" +
            "}" +
        "]" +
    "}"
    //同期処理
    //POST通信の場合はpost()postメソッドにエンドポイントを渡す
    //body()メソッドにリクエストパラメータを渡す
    //responseJsonで実行。resultにレスポンスのJsonが返る
    val (request, response, result) = Fuel.post(path).body(body).responseJson()
    
    //非同期処理
    Fuel.post(path).body(body).responseJson { request, response, result ->
        //dosomething                                         
    }
    

    余談

    何故、Fuelを使ったか・・・

    それはAndroidの定番のRetrofitライブラリだとAPIのエンドポイントに

    コロンがあると不正なURLでエラーになり、ハマったからです。

    Kotlinのライブラリを使おうとういう正当な理由ではありませんでした。

    参考

    Fuel公式サイト

    Vision API