我有一个小问题,我想解决。我需要为以下请求创建改装服务
https://www.googleapis.com/books/v1/volumes?q=isbn:9788087270431
我的API目前看起来像:
public interface GoogleBooksApi {
@GET("/books/v1/volumes")
Call<BookResponse> getBooksByIsbn(@Query("q") String isbn);
}
但我每次都必须使用前缀“isbn:”。有人能告诉我如何正确地做到这一点吗?
答案 0 :(得分:1)
这里的问题似乎是你误解了你对getBooks的调用所期望的实际参数。
@GET("/books/v1/volumes")
Call<BookResponse> getBooksByIsbn(@Query("q") String isbn);
实际应该是
@GET("/books/v1/volumes")
Call<BookResponse> getBooks(@Query("q") String query);
然后你可以通过以下调用将调用包装到API中:
public void findByIsbn(String isbn) {
GoogleBooksApi api = restAdapter.create(GoogleBooksApi.class);
String query = buildIsbnQuery(isbn);
api.getBooks(query);
}
public String buildIsbnQuery(String isbn) {
return String.format("isbn:%s");
}
这样,如果要求不再是ISBN,那么您不必更改api代码的实际功能,只需要添加一个额外的查询构建器方法,这使得它更加尊重open-closed principal。
不建议更改改装代码,完全没有必要。