Dart 네트워크 통신

김도현·2023년 12월 17일

http(HyperText Transfer Protocol)를 이용한 통신이 가능하다.
HTTP는 상태라는 개념이 존재하지 않기 때문에 세션과 쿠키를 사용해 구분
웹에서 서버는 세션, 클라이언트는 쿠키를 통해 상태 저장
원래 문서 전송용으로 설계된 상태 비저장용 프로토콜
브라우저가 GET 요청으로 웹 서버의 문서를 읽어오는 용도였다.
서버와 클라이언트가 텍스트, 이미지, 동영상 등의 데이터를 주고 받을 때 사용하는 프로토콜로 확장
웹 상에서 보는 이미지, 영상, 파일과 같은 바이너리 데이터도 HTTP 멀티파트나 Base64 인코딩하여 사용

HTTP 는 상태 비저장 프로토콜
요청 메시지를 보내기 직전까지 대상 컴퓨터가 응답 가능한지 알 방법 없음
Stateless 프로토콜, 즉 상태가 없는 프로토콜이라고 함

요청 메서드 종류
GET: 일반적으로 웹 브라우저가 서버에 웹 페이지를 요청할 때 사용
읽기 요청, body를 포함할 수 없음
POST: 클라이언트에서 서버로 데이터가 포함된 요청을 보낼 때 사용
로그인, 주문 요청 등
DELETE: 삭제
PUT: 업데이트

상태코드
모든 HTTP 응답에는 상태 코드와 상태 메시지가 있음
200 OK
400 Bad Request
404 Not Found
500 Internal Server Error

REST(representational state transfer)ful API
서버와 클라이언트가 메시지를 주고받을 때 가장 많이 사용하는 통신 규격 (암묵적인 룰)
REST: 분산 시스템을 위한 소프트웨어 아키텍처의 한 형태
RESTful 이란 REST 조건을 만족한다는 뜻
요청 주소(URL)과 메서드(GET, POST 등), JSON 규격을 이용하여 API를 정의

Response 객체를 이용하여 statusCode, body 등의 정보 활용 가능

데이터를 받아올 객체를 모델 클래스로 만들기
Json 데이터를 클라이언트로 받아올 때 이를 모델 클래스로 만들어서 다양하게 데이터가 쓰일 수 있게 한다.

파싱이란 json 데이터를 원하는 프로그래밍 언어나 환경에서 읽어들이고 해당 데이터를 사용할 수 있도록 하는 과정

// Json 1개를 파싱하는 패턴
Future<Movie> getMovie(String title) async {
  final response = 
    await http.get(Uri.parse('http://.....'));
  return Movie.fromJson(jsonDecode(response.body));
}
// Json array(여러개)를 파싱하는 패턴
Future<Movie> getMovie(String title) async {
  final response = 
    await http.get(Uri.parse('http://.....'));
  final jsonList = jsonDecode(response.body) as List<dynamic>;
  return jsonList.map((e) => Movie.fromJson(e)).toList();
}

0개의 댓글