일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 오존석의 생존코딩
- 패스트 캠퍼스
- 플러터
- 오준석의생존코딩
- 모두의 연구소 # 오준석의생존코딩# 오름캠프
- 생존코딩
- Tag #패스트캠퍼스 #내일배움카드 #국비지원 #K디지털기초역량훈련 #바이트디그리 #자바인강
- 오준석의 생존코딩
- 모두의연구소
- 모두연구소
- #패스트캠퍼스 #내일배움카드 #국비지원 #K디지털기초역량훈련 #바이트디그리 #자바인강
- 오름캠프
- 모두의연구소 오준석생존코딩 오름캠프
- 오름캠프플러터
- ㅇ
- Today
- Total
꾸준히 하고싶은 개발자
14일 네트워크 통신 본문
네트워크 통신
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 직렬화 역직렬화 할때 제대로 이해하지못한거 같다. → 동작 원리 를 이해하지 못했습니다.