LoginSignup
0
0

More than 3 years have passed since last update.

API呼ぶ【準備編】

Last updated at Posted at 2019-12-26

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をたたいていきます

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0