본문 바로가기

Flutter-플러터/플러터 공부

Flutter - Http get, post

반응형

 

회사에서 회원 가입 로직을 만들고 있다. 

API 다뤄 보지 못한 내가......... 너무 힘들다. 

 

기존 코드로 잘 짜맞춰서 하고 있긴 한데 기본도 없으니 뭐가 뭔지 모르겠다. 

 

그래서 지금 깃허브에 있는 flutter 로그인 코드를 클론코딩 하고 있다. 

 

하다보니 get, post 함수가 눈에 많이 띈다. 

 

 

get, post 는 API를 받아 올 때 가장 많이 쓰이는 함수이다. 

 

차이점은 다음과 같다. 

 

 동일한 요청을 했을 때 동일한 결과가 나오는 것인가?

 

동일한 요청에 동일한 결과가 나오면 get 

동일한 요청에 다양한 결과가 나오면 post 

이렇게 쓰면 된다. 

 

단순히 API를 통해 정보를 조회하거나 검색 용도로 쓴다면 get 

새로운 정보를 주입하거나 요청할 때는 post 이다. 

 

Get

 

사용방법은 get은 쿼리문으로 사용한다. 

var url = 'http:example.com/key1=value1&key2=value2;

위 get을 받아오려면 

 

import 'dart:convert';
import 'package:http/http.dart' as http;

void main() async {
  final url = 'https://jsonplaceholder.typicode.com/posts/1';
  final response = await http.get(Uri.parse(url));

  if (response.statusCode == 200) {
    // 서버가 요청을 성공적으로 수행했을 때 실행됩니다.
    var data = jsonDecode(response.body);
    print('Title: ${data['title']}');
  } else {
    // 서버가 요청을 성공적으로 처리하지 못했을 때 실행됩니다.
    print('Failed to load data');
  }
}

Post

 

post는 위에 쿼리문으로 데이터를 이동하는게 아니라 해당 값의 실체 body를 통해 이동시킨다. 

다음과 같은 3가지 구성요소가 필요하다. 

url , body, headers 

 

url은 get과 마찬가지로 해당 값을 받아오는 주소를 말하고 

그 주소에 데이터값의 형태 보통 Map의 형태로  body = {'email' : emailcontroller.text.trim(), 'password': passwordcontroller.text.trim()} 

그리고 header부분  headers ={'Conten-Type' : 'application/json'}. 해당 파일이 어떤 형태인지 알려주는 것 

 

import 'dart:convert';
import 'package:http/http.dart' as http;

Future<void> sendPostRequest() async {
  final url = 'https://example.com/api'; // 요청을 보낼 URL

  final response = await http.post(
    Uri.parse(url),
    headers: <String, String>{
      'Content-Type': 'application/json; charset=UTF-8',
    },
    body: jsonEncode(<String, String>{
      'key1': 'value1',
      'key2': 'value2',
      // 추가로 필요한 key-value 쌍을 입력합니다.
    }),
  );

  if (response.statusCode == 200) {
    print('요청 성공: ${response.body}');
  } else {
    print('요청 실패: ${response.statusCode} ${response.reasonPhrase}');
  }
}

 


json Encode vs Decode

 

Encode 는 다트 객체 Map이나 List를 json 형태로 변환시키는 것 

Decode는 json 형태의 파일을 다트 객체 Map, LIst로 변환 시키는 것 

 

import 'dart:convert';

void main() {
  // Dart 객체 정의
  var user = {
    'name': 'John Doe',
    'age': 25,
    'email': 'johndoe@example.com',
  };

  // jsonEncode: Dart 객체를 JSON 문자열로 변환
  String jsonString = jsonEncode(user);
  print('Encoded JSON string: $jsonString');

  // 출력: Encoded JSON string: {"name":"John Doe","age":25,"email":"johndoe@example.com"}

  // jsonDecode: JSON 문자열을 Dart 객체로 변환
  Map<String, dynamic> decodedUser = jsonDecode(jsonString);
  print('Decoded Dart object: $decodedUser');
  print('Name from decoded object: ${decodedUser['name']}');

  // 출력: 
  // Decoded Dart object: {name: John Doe, age: 25, email: johndoe@example.com}
  // Name from decoded object: John Doe
}
반응형

'Flutter-플러터 > 플러터 공부' 카테고리의 다른 글

Flutter- http 분기처리  (0) 2023.09.19
Flutter Stack 과 Container  (0) 2023.09.09
Flutter -trim()  (0) 2023.08.28
Flutter - Getx StateMixin  (0) 2023.08.24
Flutter 3.0- Firebase CLI 연동하기  (0) 2023.08.23