일반적으로 서버는 Rest API를 이용해 데이터를 Json의 형태로 프론트와 주고 받는다.
또한 정보를 담고있는 간단한 API들도 Json의 형태로 제공되는 경우가 많다.
보통 Json은 아래의 사이트처럼 http로 시작하는 일반적인 웹사이트이지만 텍스트로 정보들만 나열되어 있다.
https://api.binance.com/api/v1/ticker/allPrices (암호화폐 거래소 Binanace의 거래목록 리스트 Json)
우리는 이러한 http 주소에서 데이터를 파싱해 dart의 자료구조로 바꿔 앱에서 사용할 수 있다.
JSON 파싱
http | Dart Package
A composable, multi-platform, Future-based API for HTTP requests.
pub.dev
해당 패키지를 import 한다.
import 'package:http/http.dart' as http;
import 'dart:convert'; //json으로 바꿔주기 위해 필요한 패키지
var uriResponse = await http.get(
Uri.parse(
'http://~~~',
),
);
var json = jsonDecode(uriResponse.body);
return json;
http.get 함수로 json을 불러와 uriResponse 변수에 담는다.
Resonpse 객체의 body가 우리가 필요한 json이다. 이를 jsonDecode 함수로 dart의 자료 타입으로 변경해준다.
API KEY 및 parameter가 있는 JSON 파싱
앞선 방법으로는 가장 기본적인 JSON만을 파싱할 수 있다.
조금 더 전문적인 서비스에서 제공하는 API를 통해 JSON을 파싱할 때에는 해당 서비스에서 KEY를 발급받아야한다.
보통, API는 요청할 수 있는 횟수가 제한되어 있는데 이를 카운팅하고 제한하기 위해 별도의 KEY를 부여한다.
그리고 데이터의 양이 방대할 경우 서비스의 공식문서에 존재하는 해당 API의 Parameter를 함께 요청해 데이터를 세분화해서 받아올 수 있다.
왼쪽은 Coinmarketcap.com의 암호화폐 정보에 대한 API이다.
Parameter로 id, slug, aux를 받을 수 있다고 되어있다. Parameter 없이 요청이 가능하지만 모든 데이터가 필요하지 않을 경우 Parameter를 사용하면 특정 데이터만을 요청할 수 있다.
API 마다 다르니 공식문서를 참고해야한다.
또한, 이러한 서비스의 API는 가입 혹은 결제를 필요로 하며 이후 API를 요청할 수 있는 KEY가 발급된다.
우리는 API의 http, KEY, 필요하다면 Parameter를 가지고 원하는 데이터로 JSON을 파싱할 수 있다.
Future<Map> getInfo() async {
try {
var headers = {
'Accepts': 'application/json',
'X-CMC_PRO_API_KEY': '4ac866a5-~~~~~API KEY',
};
var parameters = {'limit': '10'}; //공식문서를 참고한 parameter
var uriResponse = await http.get(
Uri.https(
'pro-api.coinmarketcap.com', '/v1/exchange/listings/latest'),
//전문적으로 제공되는 API는 본 함수를 사용해 주소를 쪼개어준다
headers: headers);
var json = jsonDecode(uriResponse.body);
return json;
}
'Flutter > Flutter Tech' 카테고리의 다른 글
[플러터] 가로 모드 회전 막기 (0) | 2021.12.01 |
---|---|
[플러터] application/octet-stream type (0) | 2021.11.19 |
[플러터] 프로젝트 내 Json 파일 읽기 (0) | 2021.04.15 |
[플러터] Status bar 색상 변경하기 (1) | 2021.03.03 |
[플러터] Device 설정 무시 글자 크기 고정하기 (0) | 2021.02.28 |