NaraForm Docs
API 參考

程式碼範例

cURL、JavaScript、Python 的 API 使用範例

以下範例示範常見的 API 操作。將 YOUR_API_KEY 替換為你的實際 API 金鑰,YOUR_DOMAIN 替換為你的部署網址。


建立表單

cURL

curl -X POST https://YOUR_DOMAIN/api/forms \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "產品回饋問卷",
    "slug": "product-feedback"
  }'

JavaScript (fetch)

const response = await fetch('https://YOUR_DOMAIN/api/forms', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    title: '產品回饋問卷',
    slug: 'product-feedback',
  }),
});

const { form } = await response.json();
console.log('建立成功,表單 ID:', form.id);

Python (requests)

import requests

response = requests.post(
    'https://YOUR_DOMAIN/api/forms',
    headers={
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json',
    },
    json={
        'title': '產品回饋問卷',
        'slug': 'product-feedback',
    },
)

form = response.json()['form']
print(f"建立成功,表單 ID:{form['id']}")

更新表單 Schema

先取得草稿端點,再更新 schema。

JavaScript (fetch)

const formId = 'clx1234';

const schema = {
  version: 1,
  title: '產品回饋問卷',
  description: '請分享您對我們產品的看法',
  mode: 'immersive',
  questions: [
    {
      key: 'overall',
      type: 'rating',
      title: '您對產品的整體滿意度?',
      required: true,
      scaleMin: 1,
      scaleMax: 5,
    },
    {
      key: 'feedback',
      type: 'long-text',
      title: '有任何改善建議嗎?',
      placeholder: '請詳細描述...',
    },
  ],
};

await fetch(`https://YOUR_DOMAIN/api/forms/${formId}/version/draft`, {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(schema),
});

列出所有表單

cURL

curl https://YOUR_DOMAIN/api/forms \
  -H "Authorization: Bearer YOUR_API_KEY"

Python (requests)

import requests

response = requests.get(
    'https://YOUR_DOMAIN/api/forms',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

forms = response.json()['forms']
for form in forms:
    print(f"{form['title']}{form['status']} ({form['responseCount']} 份回覆)")

查詢回覆資料

JavaScript (fetch)

const formId = 'clx1234';

const response = await fetch(
  `https://YOUR_DOMAIN/api/forms/${formId}/responses?limit=50&page=1`,
  {
    headers: { 'Authorization': 'Bearer YOUR_API_KEY' },
  },
);

const { responses } = await response.json();
responses.forEach((r) => {
  console.log(r.submittedAt, r.answers);
});

發布表單

cURL

curl -X POST https://YOUR_DOMAIN/api/forms/clx1234/publish \
  -H "Authorization: Bearer YOUR_API_KEY"

Python (requests)

import requests

response = requests.post(
    'https://YOUR_DOMAIN/api/forms/clx1234/publish',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

result = response.json()
print(f"公開網址:https://YOUR_DOMAIN/s/{result['form']['slug']}")

下載 CSV 回覆

cURL

curl https://YOUR_DOMAIN/api/forms/clx1234/responses/export \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o responses.csv

Python (requests)

import requests

response = requests.get(
    'https://YOUR_DOMAIN/api/forms/clx1234/responses/export',
    headers={'Authorization': 'Bearer YOUR_API_KEY'},
)

with open('responses.csv', 'wb') as f:
    f.write(response.content)

print('已下載回覆資料至 responses.csv')