→ 데이터베이스를 쿼리할 때 수신되는 것은 페이지 배열
→ 노션을 코드로 접근해서 CMS 혹은 데이터베이스로 활용 가능

Notion의 이벤트 데이터베이스와 Google 캘린더와의 동기화Endpoint란 API가 서버에서 자원(resource)에 접근할 수 있도록 하는 URL
Database , Page, Block , User 로 Database 내부에 항목을 추가하거나 Page의 Block를 수정하는 등
JavaScript SDK 사용

cURL 사용
사용자가 제출할 수 있는 입력폼 웹어플리케이션을 만들고 받은 데이터를 노션 API로 보내기 노션 DB에 데이터가 업데이트
노션 API URL을 Auth 헤더와 함께 접근


페이지 부모 설정(데이터베이스 아이디)
속성 = 데이터베이스 안에 있는 열의 이름






보안 이슈 때문에 브라우저에서 해당 API를 부를 수 없고 서버에서 부름 서버는 파이썬 자바 등 어떤 형태로 구현 가능하다.
https://api.notion.com/v1/databases/{database_id} URL로 Get 요청
Authorization
- Type : Bearer Token 으로 Toekn 값으로 시크릿의 ‘프라이빗 API 통합 토큰’ 입력
- What is Bearer Token?
[토큰 기반 인증 방식](https://www.notion.so/c1f3fe4ee8134f93b7900e1f3d203944) 중 하나로 JWT 혹은 OAuth에 대한 토큰을 사용

Header


Grocery Test 데이터베이스를 통해 아이템 추가해보기

DB 객체 = 사용자가 데이터베이스를 열 때 Notion에서 보이는 것
가장 중요한 부분은 “properties”에 정의된 DB 스키마
{
"object": "database",
"id": "da3e736306e4495b99dcc51971274d3a",
"created_time": "2022-08-07T19:10:04.968Z",
"last_edited_time": "2022-08-09T21:49:37.913Z",
"title": [/* details omitted */],
"properties": {/* a collection of property objects */},
}
2.데이터베이스 속성(Properties)
속성은 열에 있는 모든 값들의 타입을 포함하여 열에 대한 설명을 저장
→ 텍스트, 날짜 , URL 등 다양한 타입 사용 가능 (Key: 속성 이름, Value: 속성 객체)

Grocery Test 데이터베이스 객체에는 총 3가지의 속성으로 정의된다. (title /number /date)
{
"object": "database",
"properties": {
"Grocery item": {
"id": "fy:{",
"type": "title",
"title": {} -> Title(제목) : DB에서 title 타입을 가진 단 하나의 속성
},
"Price": {
"id": "dia[",
"type": "number",
"number": {
"format": "dollar" -> number 특정 속성에 추가 구성 가능
}
},
"Last ordered": {
"id": "]\\R[",
"type": "date",
"date": {}
},
}
// remaining details omitted
}
curl -X POST https://api.notion.com/v1/pages \
-H 'Authorization: secret_Jueo9fvwkT7EuuMpa5qwubYzI0vsBJM2taTIW7PpVoU' \
-H "Content-Type: application/json" \
-H "Notion-Version: 2022-06-28" \
--data '{
"parent": { "type": "database_id", "database_id": "da3e736306e4495b99dcc51971274d3a"},
"properties": {
"Grocery item": {
"type": "title",
"title": [{ "type": "text", "text": { "content": "방울토마토" } }]
},
"Price": {
"type": "number",
"number": 1.49
},
"Last ordered": {
"type": "date",
"date": { "start": "2022-08-09" }
}
}
}'

<한계점>
현재까지 노션 API는 초당 3개의 요청만을 처리할 수 있다. 따라서 프로젝트 규모가 커질 경우 API 앞에 캐싱 레이어를 추가하는 것을 고려해야 할 경우 발생 가능
사용한 Database