flutter with notion api (ft.chatgpt) - 후기
flutter개발 notion api 이용하자.
- 안내말 입니다.
- 개인적으로 남기는 글입니다. 아래의 경우를 미리 공지합니다.
- 높임말은 없는 경우가 있습니다.
- 영어, 일본어, 베트남어를 공부하고 있습니다. 경우에 따라서 사용됩니다.
- 보기 거북하다면 뒤로가기 해주세요.
이야기 시작-
후기 입니다. 코드 등은 기록으로 남기지 않았습니다. 어떻게 하면 되는지 흐름 정도로 기억을 남기고자 하는 글입니다.
최근에 notion 을 조금더 쉽게 사용하면 어떨까 라는 생각에 api 를 이용하면?? 으로 생각을 하였다. 그래서 chatgpt를 이용해서 조금 더 쉽게 접근 해보려고 했다. 결론은 chatgpt 의외로 괜찮은 조언자? 인것같다.
Notion API 이해가 필요
notion은 한동안 많은 사람들이 애용? 하는 어플이 되었다. 현재 무료로 풀리기도 하였고 AI 기능을 추가 하면 월 10$ 인가? 사용도 가능하다. second brain 이라고 정말 수많은 사람들이 추천도하고 기능도 팔고 있다.
API를 이용하면 데이터베이스(테이블)에 저장된 내용을 가져오거나 업데이트를 할 수 있다. 물론 삭제도 가능, 대표적으로 TODO 를 생각하면 된다. API를 이용하기 위해서는 보안키를 발급받아야한다.
- 개발자 사이트에 접속
https://developers.notion.com/
View my integrations 으로 접속하여 진행한다. - 페이지를 1개 만들고 적당한 이름으로 지정한 뒤
데이터베이스를 만들고 속성등은 자신이 사용하기 위한 것으로 수정을 한다.
개인적 의견으로는
- title 은 전부 영문으로 한다.
- 첫 열에 Name 부분은 건들이지 않는다. (실제 노션으로 접속해서 빈칸이 되어서 보기? 에 안는 안좋지만,API에서 첫 열Name을 변경하면 다른 형식? 으로 되어서 json 을 파악해야하는 경우가 발생한다. - 데이터베이스 ID를 가져온다.
데이터베이스에서 "보기링크복사" 한뒤에 에디터에서 잠시 붙여넣기 하고https://www.notion.so/아이디/~~~~~?~
아이디 뒤 / 부터 물음표 앞 까지가 데이터베이스 ID가 된다. - 노션 API에 주의점은 각 요청에 대해 3초 딜레이가 있다는 것이다. flutter에서 delay 를 줘야한다.
flutter
팩키지를 추가 해줍니다. http 입니다. (dotenv를 활용해서 키를 숨길수도 있습니다)
노션이랑 연결하는 코드를 작성합니다.
import 'dart:convert';
import 'package:http/http.dart' as http;
class NotionService {
final String apiKey = 'YOUR_NOTION_API_KEY';
final String databaseId = 'YOUR_DATABASE_ID';
Future<void> fetchNotionItems() async {
final url = Uri.parse('https://api.notion.com/v1/databases/$databaseId/query');
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
'Notion-Version': '2022-06-28',
},
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
print(data);
} else {
print('Failed to load items: ${response.statusCode}');
}
}
}
노션쪽에서 말한 딜레이 3초에 대해서 꼭 작성을 해서 에러가 발생되지 않도록 만드는 것이 관건이다. 다 만들고 나면, icon 변경이라든지 app name change 라든지 한 일이 아직 많이 남았다.
갈길이 멀다 멀어.
배포
배포는 여러 방법이 존재한다.
- 각각 스토어에 개발자 등록하고 배포
- 안드로이드는 apk 배포
- ios 는 firebase app Distribution 을 이용해서 배포
끝.