특정 서비스를 구현하는 데 있어, 특정 API 속성 값을 정의한 하나의 서버측만 통신이 필요할 경우 해당 서버의 속성을 준수만한다면 API를 요청하고 리스폰스를 반환하는 로직 내부에 어떠한 분기처리도 필요없다. 하지만, 다수의 서버의 각기 다른 서버 속성을 준수하는 형태의 서비스가 필요할 경우, HTTP 리퀘스트 혹은 리스폰스의 헤더 필드와 같은 특정 속성의 분기도 필요하지만 API를 요청하는 로직자체가 다를 수 있다.
예를 들어, 현재 내가 작업하고 있는 프로젝트의 경우 A라는 인터페이스를 사용하여 API를 호출하도록 정의되어있지만, 내부에서 인터널 API와 같이 디버깅용도로 사용하는 API의 경우에는 A라는 인터페이스가 아닌, Apple Foundation 프레임워크 내 URLSessionDataTask를 사용하여 응답을 받아야하는 경우도 존재한다.
이와 같이 서버마다 다른 API 요청 형태를 서비스 클라이언트 단에서 변경사항을 알 필요도 없이 API명세대로만 리퀘스트를 생성해서 응답을 받는 공통 인터페이스만 지키고 내부에 필요한 로직은 외부로 노출하지 않는 그런 구조를 API Gateway라고 한다.
네트워크를 요청하는 부분을 간략히 그려보았다.
핵심은 서버마다 사용하는 필드 속성이나 API 로직이 다르고
클라이언트는 새 API명세를 통해 리퀘스트/리스폰스를 받을 때
매번 저 내부의 구조를 알아야 로직을 호출할 수 있다면 매우 번거로울 수 있다.
즉, APIGateway는 API를 호출하는 로직을, APIProvider는 API를 제공하는 서버별 속성을 분기하여
궁극적으로 서비스 클라이언트 개발자가 하는 일을 오직 API명세로 부터 API 객체를 정의하는 것만 하도록 한다.
'스위프트' 카테고리의 다른 글
[Swift] UITableView & UITableViewCell 고찰 (0) | 2021.10.27 |
---|---|
[Network] NWConnection (0) | 2021.10.22 |
[Swift/디자인패턴] 팩토리 메서드 패턴 (0) | 2021.10.05 |
[Swift/Xcode] Framework를 만들고, Import 시키자 (0) | 2021.10.04 |
[Swift] UITextView의 실제 Text영역의 Height를 구해보자 (0) | 2021.09.14 |