flutter에서 http에 해당하는 글 1

firebase SDK 없이 flutter에서 firestore에 post요청 보내기

Computer 비관심/Flutter|2020. 11. 26. 00:29
반응형

실시간 기능도 필요 없어서 SDK를 사용하고 싶지 않았다. 

그냥 간단하게 요청하여 필요한 데이터를 json현태로 받고 싶었다. 그런데 flutter 자료가 아직 많지 않아서 해맷다.

 

 

1. 일단 http 요청을 하기위해서 http모듈을 임포트 하였다.

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

 

2. 아래와 같이 GET 요청을 보내게 되면 모든 documents를 불러오게 된다. 

https://firestore.googleapis.com/v1/projects/프로젝트명/databases/(default)/documents

 

다큐먼트를 모두 불러온 뒤 클라이언트에서 필터링하면 시간도 엄청나게 걸릴 뿐더러 차후 과금에 문제가 생긴다.

 

3. 파이어베이스의 structuredQuery를 사용하면 데이터를 반환받는 조건을 만들어서 보낼 수 있다.

cloud.google.com/firestore/docs/reference/rest/v1/StructuredQuery

 

아래는 이름을 검색해서 그 검색한 이름과 동일한 다큐먼트를 반환 하는 스트럭쳐드쿼리 예제이다.

1) projectID는 firestore의 프로젝트 이름

2) col은 colection이름

3) fielVal은 내가 찾을 값 (name 필드에서 value가 찾을 내용과 같은 다큐먼트를 필터해서 리턴)

4) body에 json.encode를 해야함.

dynamic response = await http.post(
  'https://firestore.googleapis.com/v1/projects/' +
  	projectID +'/databases/(default)/documents:runQuery',
  headers: {'Content-Type': 'application/json'},
  body: json.encode({
  	'structuredQuery': {
  		'where': {
  			'fieldFilter': {
  				'field': {'fieldPath': 'name'},
  				'op': 'EQUAL',
  				'value': {'stringValue': '${fielVal}'}
 				}
              },
              'from': {'collectionId': '${col}'}
              }
}));

 

 

댓글()