Skip to Content
APIREST API

REST API

행을 조회하고, 추가하고, 수정하고, 지웁니다. 문법은 PostgREST를 따릅니다.

모든 경로는 https://gridie.ai/api/v1 아래에 있습니다.

테이블 목록

GET /api/v1/tables

이 키로 다룰 수 있는 테이블을 컬럼 정보와 함께 돌려줍니다. 클라이언트를 짜기 전에 모양을 확인하는 용도입니다.

{ "tables": [ { "name": "orders", "label": "주문", "description": null, "rowCount": 128, "columns": [ { "name": "id", "type": "INTEGER", "nullable": false, "primaryKey": true }, { "name": "customer", "type": "TEXT", "nullable": true, "label": "고객명" } ] } ] }

name이 요청에 쓰는 이름이고, label은 그리디 화면에 보이는 이름입니다. 목록이 비어 있다면 아직 어떤 테이블도 API에 열지 않은 것입니다.

이 엔드포인트는 그리디가 더한 것이라 응답이 행 배열이 아니라 tables 키를 가진 객체입니다.

행 조회

GET /api/v1/tables/orders

응답은 감싸는 키 없이 행 배열입니다.

쿼리 파라미터

이름형식설명
select쉼표 목록가져올 컬럼. 기본은 전체
order컬럼.방향created_at.desc처럼. 쉼표로 여러 개
limit정수기본 50, 최대 1000
offset정수건너뛸 행 수
그 밖의 이름연산자.값컬럼 필터. status=eq.paid
curl "https://gridie.ai/api/v1/tables/orders?select=id,customer,total&status=eq.paid&total=gte.10000&order=created_at.desc&limit=20" \ -H "apikey: $GRIDIE_API_KEY"

없는 컬럼을 적으면 400과 함께 어떤 이름이 틀렸는지 알려 줍니다. 조용히 무시하지 않습니다.

필터 연산자

연산자
eq같다status=eq.paid
neq다르다status=neq.draft
gt gte크다, 크거나 같다total=gte.10000
lt lte작다, 작거나 같다total=lt.500
like패턴 일치. *가 와일드카드name=like.김*
ilike대소문자 무시 패턴 일치email=ilike.*@gmail.com
isnull, true, false 판정paid_at=is.null
in목록 중 하나status=in.(paid,shipped)

not.을 앞에 붙이면 뒤따르는 조건을 통째로 뒤집습니다.

status=not.eq.paid paid_at=not.is.null

여러 파라미터를 함께 보내면 모두 AND로 묶입니다.

정렬

order=created_at.desc order=priority.asc.nullslast,created_at.desc

방향은 ascdesc, null 위치는 nullsfirstnullslast를 붙입니다.

전체 개수 세기

기본적으로는 개수를 세지 않습니다. 페이지를 나눠 보여주느라 총계가 필요하면 헤더로 요청하세요.

curl "https://gridie.ai/api/v1/tables/orders?limit=20" \ -H "apikey: $GRIDIE_API_KEY" \ -H "Prefer: count=exact"

Content-Range 헤더에 담겨 옵니다.

Content-Range: 0-19/128

요청하지 않았다면 총계 자리가 *입니다. 매번 세면 읽기마다 쿼리가 한 번 더 돌아서 그렇습니다.

행 하나만 받기

Accept 헤더로 단일 객체를 요구할 수 있습니다. supabase-js의 .single()이 이렇게 보냅니다.

curl "https://gridie.ai/api/v1/tables/orders?id=eq.1" \ -H "apikey: $GRIDIE_API_KEY" \ -H "Accept: application/vnd.pgrst.object+json"

결과가 정확히 한 행이 아니면 406을 돌려줍니다.

행 추가

POST /api/v1/tables/orders

본문에 객체 하나 또는 객체 배열을 담습니다. 감싸는 키는 없습니다.

curl -X POST "https://gridie.ai/api/v1/tables/orders" \ -H "apikey: $GRIDIE_API_KEY" \ -H "Content-Type: application/json" \ -H "Prefer: return=representation" \ -d '[{"customer":"김지훈","total":42000,"status":"paid"}]'

Prefer: return=representation이 있으면 201과 함께 저장된 행이 돌아오고, 없으면 본문 없이 204만 돌아옵니다.

배열로 여러 행을 보낼 때는 모든 행이 같은 컬럼 집합을 가져야 합니다. 행마다 컬럼이 다르면 어느 쪽을 기본값으로 둘지 요청만 봐서는 정해지지 않아서, 400으로 거절합니다.

업서트

Prefer: resolution=merge-duplicates를 붙이면 기본키가 겹칠 때 갈아 끼웁니다. supabase-js의 .upsert()가 이 헤더를 보냅니다.

curl -X POST "https://gridie.ai/api/v1/tables/orders" \ -H "apikey: $GRIDIE_API_KEY" \ -H "Content-Type: application/json" \ -H "Prefer: resolution=merge-duplicates,return=representation" \ -d '[{"id":1,"status":"shipped"}]'

resolution=ignore-duplicates로 바꾸면 겹치는 행을 건드리지 않고 넘어갑니다.

업서트는 테이블에 기본키가 있어야 합니다. 없으면 무엇을 기준으로 겹쳤다고 볼지 정할 수 없어서 400을 돌려줍니다.

행 수정

PATCH /api/v1/tables/orders

본문에는 바꿀 값을 객체 하나로 담고, 어떤 행을 바꿀지는 쿼리 파라미터 필터로 정합니다.

curl -X PATCH "https://gridie.ai/api/v1/tables/orders?id=eq.1" \ -H "apikey: $GRIDIE_API_KEY" \ -H "Content-Type: application/json" \ -H "Prefer: return=representation" \ -d '{"status":"archived"}'

필터가 하나도 없으면 거절합니다. 조건 없는 UPDATE는 테이블 전체를 덮어씁니다. 정말 전부 바꾸려면 항상 참인 조건을 명시적으로 적으세요. 예를 들어 id=gte.0입니다.

행 삭제

DELETE /api/v1/tables/orders
curl -X DELETE "https://gridie.ai/api/v1/tables/orders?status=eq.draft" \ -H "apikey: $GRIDIE_API_KEY" \ -H "Prefer: return=representation"

수정과 마찬가지로 필터가 없으면 거절합니다.

쓰기 응답의 행 수

수정과 삭제는 조건에 걸린 행을 모두 처리합니다. 다만 Prefer: return=representation으로 돌려받는 행은 1000개에서 끊깁니다. 그래서 응답의 Content-Range는 총계 자리를 *로 둡니다.

Content-Range: 0-999/*

돌아온 행의 개수를 바뀐 행의 개수로 읽지 마세요. 1000개를 넘겼다면 다릅니다.

요청 헤더 정리

헤더하는 일
apikey인증. Authorization: Bearer <키>도 됩니다
Prefer: return=representation쓰기 결과로 행을 돌려받습니다. 없으면 204
Prefer: count=exact전체 개수를 세어 Content-Range에 담습니다
Prefer: resolution=merge-duplicatesPOST를 업서트로 바꿉니다
Prefer: resolution=ignore-duplicates겹치는 행을 건너뜁니다
Accept: application/vnd.pgrst.object+json행 하나를 객체로 받습니다

Supabase 클라이언트로 붙이는 방법은 Supabase 호환, 실패했을 때 돌아오는 코드는 에러 코드에 있습니다.

Last updated on

알림

입력

도입 문의

기업 도입에 관한 문의를 남겨주세요. 영업 담당자가 빠르게 연락드리겠습니다.
첨부파일