꾸준히 하고싶은 개발자

14일 네트워크 통신 본문

모두의연구소

14일 네트워크 통신

프라우스 2023. 12. 14. 23:39

네트워크 통신

HTTP

하이퍼텍스트 전송 프로토콜. 인터넷에서 정보 데이터 를 주고 받기 위한 표준 프로토콜 중 하나입니다.

서버 와 서버 사이에 통신 하기위한 룰을 정의 하는 프로토콜 입니다.

글자 전송하는 프로토콜 파싱해서 잘 보여주는 웹 브라우저 다.

바이너리 데이터

바이너리 데이터는 0과 1로 이루어진 이진 형식의 데이터

문자 데이터와 특정한 문자 집합이나 인코딩 없이 이진수(0과1로 이루어진) 코드

단위 바이트 Byte 이다

Base64인코딩

이진 데이터를 텍스트 형식 으로 인코딩하는 방법중 하나다 이는 이진 데이터를 문자열 변환 하여 전송이나 저장에 용이하게 됩니다.

RestApi

TCP

Json

URL : HTTP 네이버 주소 구글주소

파일 전송

URI

고수준

사람들이

저수준

무상태성

Stateful

stateless

앱에서 요청하면 무조건 응답이 온다.

안드로이드 10초 iOS 60초 타임아웃이 온다

캐럿 구문

^path 1.8.0

메이저 대규모 업데이트

미들 기능 추가

마이너 , 간단한 오류  수정등등

 

UDP vs TCP

Scocket

멀티 캐스팅 브로트 캐스팅

요청 메서드

get

지정된 리소스에서 데이터 를 요청하는데 사용된다.

url에 입력된 정보가 보인다.

post

처리될 데이터를 서버에 보는데 사용된다.

Delete

지정된 리소스를 제거하거나 삭제를 요청 될때 사용

put

데이터 없으면 데이터 를 넣고 데이터를 업데이트 하는데 사용

patch

서버에게 리소스 일부 를 업데이트 요청하는데 사용

상태코드

200: 데이터를 보내고 받는게 성공한 상태

400 : 잘못된 요청 한 상태

404 : url를 잘못 입력한 경우

세션과 쿠키

서버는 세션 클라이언트는 쿠키

Json List 파싱

 

실습

import 'dart:convert';

import 'package:dart_basic/23_12_14/class/model.dart';
import 'package:http/http.dart' as http;

void main() async {
  //실습 1
  final Todo todo = await getTodo2(1);
  // // 제목 뽑아보기
  // print(todo.title);
  // //아이디만 뽑아보기
  // print(todo.id);
  // // 유저 아이디뽑아보기
  // print(todo.userId);
  // //completed 뽑아보기
  // print(todo.completed);
  // 전체 뽑아보기가
  print(todo);

  // 실습 2
 List<Todo> todos = await getTodos();
  for (var e in todos) {
    // 전체를 tojson 뽑아보기가
    print('${e.toJson()}');
    // 제목
    // print(e.title);
    // 아이디
    // print(e.id);
    // 유저 아이디
    // print(e.userId);
  }
}


}

// 여러개 리스트 받을 때 패턴
Future<List<Todo>> getTodos2() async {
  // 서버에 데이터  요청
  final response = await http.get(
      Uri.parse('https://jsonplaceholder.typicode.com/todos'));
  // 제이슨 데이터 디코딩
  final jsonList = jsonDecode(response.body) as List<dynamic>;

  return jsonList.map((e) => Todo.fromJson(e)).toList();
}

// 하나 받을 때 패턴
Future<Todo> getTodo2(int id) async {
  // 서버요청
  final response = await http.get(
      Uri.parse('https://jsonplaceholder.typicode.com/todos/$id'));
  // 데이터를Todo 디코드해서  todoFromJson 모델클래스 안에 넣어준다
  return Todo.fromJson(jsonDecode(response.body));
}

// 여러개 리스트 받을 때 패턴
Future<List<Todo>> getTodos() async {
  // 서버에서 요청
  final response = await http.get(
      Uri.parse('https://jsonplaceholder.typicode.com/todos'));
  // 서버 가져온  jsonString 객체 넣는다
  final jsonString = response.body;
  // jsonList 를 디코드 해서 맵형태로 변환한다. 그리고 마지막에 리스트로 강제 형변환을 한다.
  final jsonList = jsonDecode(jsonString) as List<dynamic>;
  // jsonLis 요소를 => todoFromJson 모델클래스 안에 리스트 형 변환해서 넣어준다.
  return jsonList.map((e) => Todo.fromJson(e)).toList();
}

Future<Todo> getTodo(int id) async {
  final response = await http.get(
      Uri.parse('https://jsonplaceholder.typicode.com/todos/$id'));
  // 제이슨 데이터 스트링
  final jsonString = response.body;
  // 맵으로 변환
  final json = jsonDecode(jsonString);
  // 모델클래스로 변환
  // return Todo.fromJson(json);
  // 서버 에서 요청한 바디 데이터를 디코드 해서 모델클래스안에 넣어준다.
  return Todo.fromJson(jsonDecode(response.body));
}

모델클래스

class Todo {
  int userId;
  int id;
  String title;
  bool completed;

  Todo({
    required this.userId,
    required this.id,
    required this.title,
    required this.completed,
  });

  factory Todo.fromJson(Map<String, dynamic> json) {
    return Todo(
      userId: json['userId'] as int,
      id: json['id'] as int,
      title: json['title'] as String,
      completed: json['completed'] as bool,
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'userId': userId,
      'id': id,
      'title': title,
      'completed': completed,
    };
  }
}

void main() {
  // 예시: JSON을 객체로 변환 (fromJson)
  Map<String, dynamic> jsonMap = {
    "userId": 1,
    "id": 1,
    "title": "delectus aut autem",
    "completed": false,
  };

  Todo todo = Todo.fromJson(jsonMap);
  print(todo.userId); // 출력: 1
  print(todo.title); // 출력: delectus aut autem

  // 예시: 객체를 JSON으로 변환 (toJson)
  Map<String, dynamic> todoJson = todo.toJson();
  print(todoJson); // 출력: {userId: 1, id: 1, title: delectus aut autem, completed: false}
}

느낀점

Factory 생성자 와 fromJson toJson 직렬화 역직렬화 할때 제대로 이해하지못한거 같다. → 동작 원리 를 이해하지 못했습니다.

'모두의연구소' 카테고리의 다른 글

Find the smallest integer in the array  (0) 2023.12.17
15일차 DTO  (0) 2023.12.15
13일비동기 동기  (0) 2023.12.13
12일디버깅  (0) 2023.12.12
12람다함수  (0) 2023.12.12