Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- QueryDSL
- 그리디
- springdatajpa
- Spring Boot
- Thymeleaf
- 스프링
- JDBC
- spring
- Proxy
- 김영한
- Greedy
- 알고리즘
- transaction
- kotlin
- 백준
- 자바
- AOP
- http
- jpa
- 스프링 핵심 기능
- Android
- pointcut
- JPQL
- 인프런
- 스프링 핵심 원리
- db
- Servlet
- java
- Exception
- SpringBoot
Archives
- Today
- Total
개발자되기 프로젝트
[Server] Odsay 대중교통 api 연동 본문
1. url, 파라미터, 출력정보 확인.
- URI
메서드 | 요청 URI | 포맷 |
GET/POST | https://api.odsay.com/v1/api/searchPubTransPathT | json, xml |
- Parameter
번호 | 파라미터 | 필수값 | 설명 | 예시 |
공통 | apiKey | Y | 발급된 키 | apiKey=xxxxxxxxxxx |
공통 | lang | N | 결과 언어 선택 (국문:0 , 영문:1, 일문:2, 중문(간체):3, 중문(번체):4 , 베트남어:5) * 베트남어의 경우 수도권에 한하여 제공 default = 0 |
lang=1 |
공통 | output | N | 출력포맷(json, xml) default = json |
output=xml |
1 | SX | Y | 출발지 X좌표 (경도좌표) | SX=126.926493082645 |
2 | SY | Y | 출발지 Y좌표 (위도좌표) | SY=37.6134436427887 |
3 | EX | Y | 도착지 X좌표 (경도좌표) | EX=127.126936754911 |
4 | EY | Y | 도착지 Y좌표 (위도좌표) | EY=37.5004198786564 |
5 | OPT | N | 경로검색결과 정렬방식 0: 추천경로, 1 타입별정렬 ex) 지하철, 버스, 버스+지하철, 지하철+버스, 버스+지하철+버스 |
OPT = 0 |
6 | SearchType | N | 도시간 이동/도시내 이동을 선택한다. | 도시내 이동/도시간 이동을 구분검색한다. 0 입력시 도시내검색 (도시내검색에서 도시간검색결과 있을경우 활용) |
7 | SearchPathType | N | 도시 내 경로수단을 지정한다. | 0: 모두(default) 1: 지하철 2: 버스 |
해당 uri에 parameter를 붙여서 get방식으로 보내면 데이터를 받을 수 있음.
2. Application.yml
uri와 apiKey는 값이 고정된다.
application.yml에 등록하여 불러서 사용하면 편리하다.
odsay:
uri: https://api.odsay.com/v1/api/searchPubTransPathT
key: xxxxxxxxxxxxxxxxxx
3. SearchRouteReq
- Request로 보낼 정보를 모아둠.
- DTO
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SearchRouteReq {
private String SX;
private String SY;
private String EX;
private String EY;
private MultiValueMap<String, String> makeQuery(){
LinkedMultiValueMap<String, String> map = new LinkedMultiValueMap<>();
map.add("SX", SX);
map.add("SY", SY);
map.add("EX", EX);
map.add("EY", EY);
return map;
}
}
4. OdsayClient
- OdSay API를 호출하고 값을 받아오는 역할을 한다.
- @Component를 통해 스프링 빈으로 등록한다.
- @Value를 사용하여 application.yml에 등록한 값을 가져온다.
- ResTemplate를 사용하여 간단하게 처리함.
@Slf4j
@Component
public class OdSayClient {
@Value("${odsay.key}")
private String key;
@Value(("${odsay.uri}"))
private String routeSearchUri;
public String searchRoute(SearchRouteReq searchRouteReq){
URI uri = UriComponentsBuilder.fromUriString(routeSearchUri)
.queryParam("SX", searchRouteReq.getSX())
.queryParam("SY", searchRouteReq.getSY())
.queryParam("EX", searchRouteReq.getEX())
.queryParam("EY", searchRouteReq.getEY())
.queryParam("apiKey", key)
.build().encode().toUri();
log.info("[request api] uri = {}", uri);
//Http Entity
var httpEntity = new HttpEntity<>(new HttpHeaders());
var responseType = new ParameterizedTypeReference<String>(){};
//ResponseEntity
var responseEntity= new RestTemplate().exchange(
uri, HttpMethod.GET, httpEntity, responseType
);
return responseEntity.getBody();
}
}
5. ApiController
@Slf4j
@Controller
@RequiredArgsConstructor
public class ApiController {
private final OdSayClient odSayClient;
@GetMapping("/route")
public String searchRoute(){
//서율역
String SX ="126.9707979959352";
String SY = "37.5547020732267";
//잠실역
String EX = "127.10012275846414";
String EY = "37.513264531390575";
SearchRouteReq searchRouteReq = new SearchRouteReq(SX, SY, EX, EY);
return odSayClient.searchRoute(searchRouteReq);
}
}
6. Test - postman
- postman으로 잘 동작하는지 확인해 보자.
- 인증이 안된다.
- 발급된 key에 오류는 없는데.. ㅜㅜ
7. GitHub: 220116 Request OdsayAPI
'Project > 대중교통 길찾기' 카테고리의 다른 글
[Server] return 값 분석 (0) | 2022.01.20 |
---|---|
[Server] Odsay API호출 문제 해결 (0) | 2022.01.18 |
[Server] 회원 도메인 개발 (0) | 2022.01.15 |
[Server] 회원 도메인 설계 (0) | 2022.01.15 |
[Server] 도메인 분석 설계 (0) | 2022.01.15 |
Comments