본문 바로가기

iOS/니카내카

[니카내카] Endpoint에 한국어가 있다면?

728x90

그냥 한국어도 알아서 encoding 해주면 안될까? 

.. ㅠ ㅇㅋ ..

안되면 .. 직접 하지 뭐 .. 

 

#업데이트 

니카내카 1.2.0 버전의 업데이트 사항 중 하나는 공영주차장 정보를 제공하는 것이다.

그래서 새로운 탭바도 추가하고 .. 뷰/기능도 함께 추가/수정 되었다.

 

 

#서버 연결 

공영 주차장 정보 역시 서울시 공공데이터 포털의 오픈 API를 통해서 정보를 받는 형식이다.

 

이 때 만약 정보를 그냥 받아오고 싶다면

http://openapi.seoul.go.kr:8088/{API_KEY}/json/GetParkInfo/1/1000

이렇게 Endpoint에 시작 페이지와 끝 페이지만 추가해서 받아오면 되지만,

한번에 이렇게 총 16000개의 데이터를 받아오는 것은 무리가 있다고 판단되어서 행정구별로 받아오는 것으로 기획했다.

 

행정구별로 정보를 받고 싶다면 위의 URL에 하나의 Endpoint를 추가하면 되는데,

http://openapi.seoul.go.kr:8088/{API_KEY}/json/GetParkInfo/1/1000/강남

위와 같이 마지막에 행정구를 포함한 URL을 요청하면 된다.

 

 

#삽질 시작

근데 .. !! 이상하게 그냥 시작페이지와 끝 페이지를 지정해서 받아오는 것은 잘 되었는데 .. 행정구만 지정해서 URL 요청을 하면 같은 Response 구조임에도 불구하고 데이터를 받아오지 못했다. (nil로 반환)

 

그래서 !! 아 뭐지 .. ? 아 뭘까 .. ? 아 진짜 뭐지 .. 를 반복하다가 .. 갑자기 스쳐지나간 .. 

아 .. 한국어 .. 

 

한국어는 URL 인코딩할 때 추가로 작업이 필요하다 .. 는 것이 떠올랐다 .. ㅋ ..

 

나름 .. 한 .. 20-30분 정도 .. 안에 생각했으니 .. 그나마 다행 .. 아오 ;;

 

#삽질 해결 

final class ParkingAPIManager {
    
    static let shared = ParkingAPIManager()
    
    private init() { }
    
    static func requestParkingList(startPage: Int, endPage: Int, region: String, completionHandler: @escaping (ParkingList?, APIError?) -> Void) {
        let urlString = EndPoint.parkingList.requestURL + "/\(startPage)/\(endPage)/\(region)"
        
        if let safeString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed), 
           let url = URL(string: safeString) {
            URLSession.request(endpoint: URLRequest(url: url), completionHandler: completionHandler)
        }
    }
}

주차장 서버 연결 전체 코드는 위와 같다.

 

let urlString = EndPoint.parkingList.requestURL + "/\(startPage)/\(endPage)/\(region)"

매개변수로 받은 region을 URL 마지막에 추가하고

 

if let safeString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),

addingPercentEncoding 메서드를 이용해서 encoding을 하면 제대로 된 형식으로 URL이 요청된다.

 

그러면 데이터를 잘 받아온다.

Response 데이터에서 위도/경도의 정보를 가지고 지도의 어노테이션을 찍으면 잘 나오게 된다 !!

 

 

서버에 요청할 때 한국어가 포함되어 있다면, 무조건! 인코딩에 주의하자.