Ink

Contents related to tech, hobby, etc

Retrofit2のAPI定義はスラッシュで始めない

|

Retrofit2のAPI定義はスラッシュで始めない

retrofitを使用してAPIを叩く際、

   import retrofit2.Call
   import retrofit2.http.GET

   public interface MyApi {
@GET("endpoint/example")
public abstract fun exampleGet(): Call<ExampleResponse>
// ExampleResponseはどこかで定義されているものとする
   }

とかするわけなんですが、この @GET に与えるパスの先頭に / をつけてはいけない。 そうするとHTTP Status Code 404を吐かれてしまう。 代わりに、 retrofit2.Retrofit.Builder()baseUrl に渡すURLの末尾に / をつける。

// ダメ
@GET("/endpoint/example")
public abstract fun exampleGet(): Call<ExampleResponse>

// OK
@GET("endpoint/example")
public abstract fun exampleGet(): Call<ExampleResponse>

おまけ: baseUrlにslashなし&API宣言にslashありは動かない

最終的に同じになりそうだから試してみたが、エラーが出て駄目でした。 baseUrlはslashで終わらないといけないらしい。

    java.lang.IllegalArgumentException: baseUrl must end in /: https://misskey.io/api