我想知道如果有一种更可读/可操作的方式来编写改装界面而不是我这样做。
我有一个可以采用多个参数的路径,但大多数都是相同的,我用这种方式编写了我的界面:
@FormUrlEncoded
@POST("/api/questions/{questionid}/response")
Call < QuestionAnswerResponse > postResponse(@Path("questionid") String questionId,
@Field("course") String courseId,
@Field("self") String self,
@Field("hash") String hash,
@Field("sessionId") String sessionId);
@FormUrlEncoded
@POST("/api/questions/{questionid}/response")
Call < QuestionAnswerResponse > postResponse(@Path("questionid") String questionId,
@Field("course") String courseId,
@Field("self") List < Integer > self,
@Field("hash") String hash,
@Field("sessionId") String sessionId);
@FormUrlEncoded
@POST("/api/polls/{questionid}/response")
Call < QuestionAnswerResponse > postPollResponse(@Path("questionid") String questionId,
@Field("course") String courseId,
@Field("self") List < Integer > self,
@Field("hash") String hash,
@Field("sessionId") String sessionId);
@FormUrlEncoded
@POST("/api/questions/{questionid}/response")
Call < QuestionAnswerResponse > postResponse(@Path("questionid") String questionId,
@Field("course") String courseId,
@Field("self[text]") String text,
@Field("self[medias]") List < String > medias,
@Field("hash") String hash,
@Field("sessionId") String sessionId);
@FormUrlEncoded
@POST("/api/polls/{questionid}/response")
Call < QuestionAnswerResponse > postPollResponse(@Path("questionid") String questionId,
@Field("course") String courseId,
@Field("self[text]") String text,
@Field("self[medias]") List < String > medias,
@Field("hash") String hash,
@Field("sessionId") String sessionId);
@FormUrlEncoded
@POST("/api/questions/{questionid}/response")
Call < QuestionAnswerResponse > postResponse(@Path("questionid") String questionId,
@Field("course") String courseId,
@Field("self[x]") Integer x,
@Field("self[y]") Integer y,
@Field("hash") String hash,
@Field("sessionId") String sessionId);
请注意,这只是为了给你一个想法,但还有更多的签名。
参数&#34; Hash&#34;添加了,我不得不在每次通话时复制/粘贴它。它感觉不对:)。
由于
答案 0 :(得分:1)
您需要在描述性或维护代码可读性之间做出决定。
您可以查看FieldMap以使您的通话更清晰,例如:
@FormUrlEncoded
@POST("/api/questions/{questionid}/response")
Call < QuestionAnswerResponse > postResponse(@Path("questionid") String questionId,
@Field("course") String courseId,
@Field("self") String self,
@Field("hash") String hash,
@Field("sessionId") String sessionId);
会变成:
@FormUrlEncoded
@POST("/api/questions/{questionid}/response")
Call < QuestionAnswerResponse > postResponse(@Path("questionid") String questionId,
@FieldMap Map<String, Object> fields);
但是你丢失了调用中可能包含的字段的描述,你需要在其他地方定义字段。很高兴将这种信息放在一个地方供将来参考,所以解决方法可能是添加代码注释 - 但是然后你再次弄乱你的代码:)
我通常做的,有点类似于上面的例子:简化调用接口用于快速摘要,以及用于构建这些调用的“包装器”方法。例如,
@FormUrlEncoded
@POST("/api/questions/{questionid}/response")
Call < QuestionAnswerResponse > postResponse(@Path("questionid") String questionId,
@FieldMap Map<String, Object> fields);
...
public static void postResponse(String courseId, String self, String hash, String sessionId){
Map<String, String> map = new HashMap<>();
map.put("course", courseId);
map.put("self", self);
map.put("hash", hash);
map.put("sessionId", sessionId);
// ... here you build your call with FieldMap params provided
}
通过这种方式,我总是把所有东西放在一个地方,在顶部简化,在下面更详细。
希望这会有所帮助;)