Brick_REST는 데이터 지속성 라이브러리인 Brick용 RESTful API 커넥터로, REST API와의 원활한 통합을 가능하게 합니다. 데이터 가져오기, 직렬화, 플랫폼 간 상태 관리를 단순화하기 위해 어노테이션, 어댑터, 모델, 공급자 등을 제공합니다. Brick를 사용하는 개발자를 위한 것으로, 최소한의 반복 코드로 백엔드 서비스에 연결하는 과정을 간소화합니다. Android, iOS, Web, macOS, Windows, Linux를 지원하여 강력한 데이터 동기화가 필요한 크로스플랫폼 애플리케이션에 적합합니다.
사용 사례
Flutter 앱을 REST API에 연결하는 방법
JSON 직렬화 자동화
크로스 플랫폼 앱에서 원격 데이터 관리
서버 데이터를 로컬 저장소와 동기화하는 중
확장 가능한 백엔드 통합 구축
주요 기능
주석 기반의 API 모델링
내장된 JSON에서 모델로의 변환
크로스 플랫폼 지원
Brick의 지속성 레이어와의 통합
공급자 기반 데이터 액세스
적합한 대상
데이터 지속성에 Brick을 사용하는 개발자
REST API 통합이 필요한 프로젝트
크로스 플랫폼 모바일 및 웹 애플리케이션
코드 일관성과 유지보수를 우선시하는 팀
고려 사항
Brick 프레임워크에 익숙해야 합니다
REST API에 한정됨(GraphQL 제외)
Dart 코드 생성에 의존
복잡한 엔드포인트를 위해 추가 설정이 필요할 수 있습니다
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
An intuitive way to work with persistent data in Dart.
Brick is an extensible query interface for Dart applications. It's an all-in-one solution responsible for representing business data in the application, regardless of where your data comes from. Using Brick, developers can focus on implementing the application, without concern for where the data lives. Brick was inspired by the need for applications to work offline first, even if an API represents your source of truth.
Quick Start
Add the packages:
dependencies:# Or brick_offline_first_with_graphql# Or brick_offline_first_with_supabasebrick_offline_first_with_rest:sqflite:# optionaldev_dependencies:# Or brick_offline_first_with_graphql_build: any# Or brick_offline_first_with_supabase_build: anybrick_offline_first_with_rest_build:build_runner:
Configure your app directory structure to match Brick's expectations:
mkdir -p lib/brick/adapters lib/brick/db;
Add models that contain your app logic. Models must be saved with the .model.dart suffix (i.e. lib/brick/models/person.model.dart).
Run dart run build_runner build to generate your models and sometimes migrations. Rerun after every new model change or dart run build_runner watch for automatic generations. You'll need to run this again after your first migration.
And generate (de)serializing code to fetch to and from multiple providers:
$ (flutter) pub run build_runner build
Fetching Data
A repository fetches and returns data across multiple providers. It's the single access point for data in your app:
classMyRepositoryextendsOfflineFirstWithRestRepository{
MyRepository();
}
final repository = MyRepository();
// Now the models can be queried:final users = await repository.get<User>();
Behind the scenes, this repository could poll a memory cache, then SQLite, then a REST API. The repository intelligently determines how and when to use each of the providers to return the fastest, most reliable data.
// Queries can be general:final query = Query(where: [Where('lastName').contains('Muster')]);
final users = await repository.get<User>(query: query);
// Or singular:final query = Query.where('email', 'user@example.com', limit1: true);
final user = await repository.get<User>(query: query);
Queries can also receive reactive updates. The subscribed stream receives all models from its query whenever the local copy is updated (e.g. when the data is hydrated in another part of the app):
final users = repository.subscribe<User>().listen((users) {})
Mutating Data
Once a model has been created, it's sent to the repository and back out to each provider:
final user = User();
await repository.upsert<User>(user);
Associating Data
Repositories can support associations and automatic (de)serialization of child models.
classHatextendsOfflineFirstWithRestModel{
finalString color;
Hat({this.color});
}
classUserextendsOfflineFirstWithRestModel{
// user has many hatsfinalList<Hat> hats;
}
final query = Query.where('hats', Where('color').isExactly('brown'));
final usersWithBrownHats = repository.get<User>(query: query);