패키지 설치
https://pub.dev/packages/retrofit
retrofit?
retrofit 패키지는 안드로이드의 Retrofit과 유사한 형태이고, API 요청을 인터페이스로 정의한다.
이를 사용하기 위해 인터페이스를 정의하고, Retrofit 생성자를 호출하여 인스턴스를 생성한다. 그리고 인터페이스에서 정의한 메소드를 호출하면 된다.
위를 코드로 표현하면 아래와 같다.
import 'package:retrofit/retrofit.dart';
import 'package:dio/dio.dart';
part 'my_api.g.dart';
@RestApi(baseUrl: '<https://jsonplaceholder.typicode.com>')
abstract class MyApi {
factory MyApi(Dio dio) = _MyApi;
@GET('/todos/{id}')
Future getTodoById(@Path('id') int id);
@POST('/posts')
Future createPost(@Body() Map<string, dynamic=""> data);
}
// Retrofit 생성
var dio = Dio();
var myApi = MyApi(dio);
// GET 요청
var todo = await myApi.getTodoById(1);
print(todo.title);
// POST 요청
var post = await myApi.createPost({'title': 'foo', 'body': 'bar', 'userId': '1'});
print(post.id);
Retrofit은
API요청부터 모델을 만드는 과정을 자동화시킨다.
retrofit은 api에서 실제로 받는 응답 형태와 클래스의 반환값에 완전히 똑같은 형태를 넣어줘야하는 것이 매우 중요하다!
만약 똑같은 형태라면, 자동으로 JSON 형태의 값이 매핑되어 클래스의 인스턴스가 된다.
위에 주석 처리하는 부분은 retrofit을 사용하기 전, api 통신하는 부분이다. 주석처리한 약 10줄 가량의 코드를 2줄로 줄일 수 있다. 그리고 이 부분은 g.dart 파일에 자동으로 로직이 추가되게 된다.
쉽게 말하면,
원래는 api 요청을 하고, 응답 받아서 매핑하는 과정을 직접 코딩해야 되지만, retrofit을 이용하면 이를 2줄로 줄일 수 있다. 나머지는 g.dart 파일에 자동으로 코딩이 된다.