오늘부터 flutter 숙련 주차에 들어섰다.
flutter에서 HTTP 통신을 배우며, 궁금한 부분들이 생겨 기록하고자 한다.
API 통신에서 GET, POST는 가장 기본이 되는 동작이다.
GET과 POST는 데이터를 어디에 실어 보내는지와 통신의 목적에 따라 달라진다.
GET은 서버로부터 데이터를 가져오는 역할이다.
URL 뒤에 Query를 붙여보내며, 데이터가 전부 표기되어 있다.
주로 서버로부터 정보를 조회할 때 사용하며 브라우저가 결과를 기억해 캐싱이 가능하다.
반면, POST는 서버의 데이터를 수정하거나 새로 생성할 때 사용한다.
Body에 데이터를 숨겨서 전달하기에 보안성은 GET에 비해 상대적으로 높다.
하지만 데이터를 매번 새로 보내기에 캐싱은 불가능하다.
Gemini는 GET을 엽서에, POST를 택배 상자에 비유하고 있다.
엽서는 주소와 내용을 모두 볼 수 있고, 사용 공간이 적다.
택배 상자는 주소는 볼 수 있지만, 실제 물건(데이터)은 상자 안에 넣어서 보낸다.
일반적으로 HTTP 통신은 단방향 통신이다.
클라이언트가 요청을 보내면 서버는 응답하는 방식이다.
서버는 데이터를 전달하는 역할이 전부이다.
실시간 채팅이나 코인 차트처럼 데이터가 즉시 필요한 경우에는 양방 통신이 필요하다.
클라이언트가 HTTP로 먼저 요청하면, 서버가 프로토콜을 HTTP에서 WebSocket으로 변경한다.
연결은 클라이언트, 서버 둘 중 하나가 끊을 때까지 유지된다.
Uri.parse.. 어디서 많이 본 것 같이 생겼다.
int.parse, double.parse와 비슷하게 생긴듯 하다.
그래서 찾아봤다.
Uri.parse의 파라미터도 문자열을 받는다.
parse 과정을 거치면 문자열은 다음과 같은 조각으로 분해된 객체가 된다.
이렇게 객체화가 되면 uri.host처럼 코드로 쉽게 접근할 수 있다.
int.parse, double.parse와 똑같이 변환 실패 시 FormatException을 발생시킨다.
null을 반환하고 싶을 때는 마찬가지로 tryParse를 사용하면 된다.
null을 반환 시켜서 예외처리를 할건지, Exception을 반환시켜 예외처리를 할 건지는 선택사항인 듯 하다.
하지만, null을 반환 시킬 경우 다른 Exception을 처리할 수 있을 지는 조금 더 생각해봐야겠다.
Dart에서 직접 관리하는 가벼운 라이브러리이다.
군더더기 없이 필요한 기능만 제공한다.
매우 가볍고 배우기 쉽다는 장점이 있다.
또, 공식 패키지라 업데이트가 안정적이다.
HTTP 패키지가 부족했던 기능들을 전부 탑재한 라이브러리이다.
Interceptors, FromData, Global Config 등을 사용할 수 있다.
단점으로는 HTTP보다 무거움, 메인테이너의 관리에 의존적인 것이 꼽힌다.
안드로이드 개발자에게 익숙한 방식을 Dart에 이식한 라이브러리로, Dio 위에서 동작한다.
코드 생성을 통해 API 호출 부분을 인터페이스로 정의한다.