public class ApiExplorer {
private static final String BASE_URL = "http://apis.data.go.kr/B551182/hospInfoService1/getHospBasisList1";
public String execute(ApiExplorerRequest request) {
String urlString = request.buildUrl(BASE_URL);
URL url = new URL(urlString);
...
return sb.toString();
}
public static void main(String[] args) throws IOException {
ApiExplorer apiExplorer = new ApiExplorer();
ApiExplorerRequest request = new ApiExplorerRequest(...);
ApiExplorer.execute(request);
}
}
위처럼, main에 있는 코드를 재사용이 가능하도록 ApiExplorer 쪽으로 옮기세요.
다음으로, 아래처럼 execute를 동적인 쿼리가 가능하게, url을 구성하는 부분을 파라미터로 빼네세요.
public class ApiExplorerRequest {
private final String serviceKey; /*Service Key*/
private final int pageNo; /*페이지번호*/
...
private final int radius; /*단위 : 미터(m)*/
// 생성자, getter 생략
public String buildUrl(String baseUrl) {
StringBuilder urlBuilder = new StringBuilder(baseUrl); /*URL*/
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=" + serviceKey);
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("" + pageNo, "UTF-8"));
...
urlBuilder.append("&" + URLEncoder.encode("radius","UTF-8") + "=" + URLEncoder.encode("" + radius, "UTF-8"));
return urlBuilder.toString();
}
}
그리고 XML파싱 필요하면 파싱클래스를 임포트 추가해서 하셔야 해요. ApiExplorer의 execute를 호출한 다음 리턴된 문자열을 파싱하면 되겠죠. 개발자 문서를 읽어보시고 진행하시면 됩니다.
https://developer.android.com/training/basics/network-ops/xml
Edit: 코드의 순서가 바뀌어서, 고쳤어요.
builder pattern 예는 아래로 별도로 빼놓을 게요. 이 패턴은 파라미터가 많아서 오브젝을 생성을 직관적으로 만들기 위해서 사용합니다.
public class ApiExplorerRequest {
private final String baseUrl;
private final String serviceKey; /*Service Key*/
private final int pageNo; /*페이지번호*/
...
private final int radius; /*단위 : 미터(m)*/
// 생성자를 private으로 하여 강제로 buider method인 with를 사용하게 만듦.
private ApiExplorerRequest() {}
private ApiExplorerRequest(String baseUrl) {
this.baseUrl = baseUrl;
}
public static ApiExplorerRequest with(baseUrl) {
return ApiExplorerRequest(baseUrl);
}
public ApiExplorerRequest serviceKey(String value) {
this.serviceKey = value;
return this;
}
...
public ApiExplorerRequest radius(int value) {
this.radius = radius;
return this;
}
public String build() {
StringBuilder urlBuilder = new StringBuilder(baseUrl); /*URL*/
urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "=" + serviceKey);
urlBuilder.append("&" + URLEncoder.encode("pageNo","UTF-8") + "=" + URLEncoder.encode("" + pageNo, "UTF-8"));
...
urlBuilder.append("&" + URLEncoder.encode("radius","UTF-8") + "=" + URLEncoder.encode("" + radius, "UTF-8"));
return urlBuilder.toString();
}
}
// 사용예
ApiExplorerRequest request = ApiExplorerRequest.with(BASE_URL)
.serviceKey("서비스키")
.pageNo(1)
...
.radius(3000)
.build();
그리고 ApiExplorer에 있는 main()은 안드로이드에서는 의미가 없는 코드이므로 삭제해주세요. ApiExplorer클래스 이름도 역할에 맞는 좀 더 적합한 이름으로 주세요. 예를 들면, HospitalApi, ClicnicApi 등등...
ApiExplorer.execute() 메소드의 이름도 역할에 걸맞는 이름으로 고치세요. "GET", "Content-type", "application/json", response Code인 200, 300 등도 상수로 치환하시구요. HTTP_OK.= 200, HTTP_REDIRECTION = 300 (https://developer.mozilla.org/en-US/docs/Web/HTTP/Status)
BASE_URL은 아래 페이지를 참고하셔셔, build.gradle에 집어넣으세요.
https://stackoverflow.com/questions/51373523/change-buildconfig-file-in-android-studio-using-gradle
그리고 아래처럼 접근하시면 됩니다.
BuildConfig.API_BASE_URL