##API呼ぶ
以下4つのパートに分かれています。(〇〇編は適当につけましたゆるして)
API呼ぶ【準備編】
API呼ぶ【コア編】
API呼ぶ【ハンドリング編】
API呼ぶ【コール編】
##準備編
まずは必要なモデル、Json変換、自作Exceptionを用意します。
- モデル:リクエスト/レスポンスを入れる箱
- Json変換:API通信用にリクエスト/レスポンスをJsonに変換する
- Exception:結果に応じたExceptionを作り、処理の分岐の準備をする
###モデル
Getter/Setterは省略してます
リクエスト.java
package model;
public class RequestDto {
/** 外枠 */
private RequestBody request;
}
リクエスト中身.java
package model;
public class RequestBody {
/** id */
private String id;
/** 名前 */
private String name;
/** 内容 */
private String info;
}
レスポンス.java
package model;
public class ResponseDto {
/** 処理結果 */
private String resultCode;
/** 内容 */
private ResponseBody body;
}
レスポンス中身.java
package model;
public class ResponseBody {
/** 結果内容 */
private String info;
/** コメント */
private String comment;
}
###Json変換
JsonUtil.java
package json;
import model.RequestDto;
import model.ResponseBody;
import model.RequestBody;
import model.ResponseDto;
public class JsonUtil {
/**
* リクエストDTOをJsonに変換
*
* @param request リクエストDTO
* @return Json変換した文字列
*/
public static String requestDtoToJson(RequestDto request) {
RequestBody body = request.getRequest();
String json =
"{" +
"\"request\": {" +
"\"id\": " + body.getId() + "," +
"\"name\": " + body.getName() + "," +
"\"info\": " + body.getInfo() +
"}" +
"}";
return json;
}
/**
* レスポンスJsonをDTOに変換
*
* @param json レスポンスJson
* @return 変換したDTO
*/
public static ResponseDto responseJsonToDto(String json) {
json =
"{" +
"\"resultCode\": 0," +
"\"body\": {" +
"\"info\": 結果内容これだよ('ω')," +
"\"comment\": コメントだよ('ω')" +
"}" +
"}";
ResponseBody body = new ResponseBody();
body.setInfo(getContent(json, "info"));
body.setComment(getContent(json, "comment"));
ResponseDto response = new ResponseDto();
response.setBody(body);
response.setResultCode(getContent(json, "resultCode"));
return response;
}
/**
* Json文字列から情報を切り出す
* <p>
* XXX 内容にresultCodeの文字列やカンマが入っている場合だめだよねこれw
*
* @param json Json文字列
* @param content 切出し対象のパラメータ名
* @return 切出した値
*/
private static String getContent(String json, String content) {
return json.split("\"" + content + "\": ")[1].split(",")[0].split("}")[0].trim();
}
}
レスポンスのとこはやりやすさ重視ってことで、今回は固定値を入れなおしてます。
まぁライブラリがあると思うのでこれはぶっちゃけ必要ないかも?
###自作Exception
基底Exception.java
package exception;
public class NantokaApiException extends Exception{
private static final long serialVersionUID = 1L;
public NantokaApiException(String msg){
super(msg);
}
}
予期せぬエラー系をまとめるException.java
package exception;
public class NantokaApiUnknownException extends NantokaApiException {
private static final long serialVersionUID = 1L;
public NantokaApiUnknownException(String msg){
super(msg);
}
}
API処理結果はあるけどエラー結果だったときのException.java
package exception;
public class NantokaApiBadResultException extends NantokaApiException {
private static final long serialVersionUID = 1L;
public NantokaApiBadResultException(String msg){
super(msg);
}
}
ということで下準備でした
次回こいつらを使ってAPIをたたいていきます