REST API

HTTP API를 통해 장치 데이터를 전송하고 명령을 보낼 수 있습니다.

이 문서는 장치 연동에 필요한 기본 API를 간략히 설명합니다. 전체 API 명세는 Swagger 문서에서 확인하세요.


인증

모든 API는 X-API-Key 헤더로 인증합니다.

헤더설명
X-API-Keyyour-api-key그룹 API 키

Group ID와 API Key 확인 방법

계정 레벨Group ID / API Key 위치
관리자그룹 페이지에서 각 그룹의 인증 정보
매니저헤더 우측의 프로필 메뉴 > 내 그룹 인증 정보

데이터 API

장치 데이터를 서버로 전송합니다. deviceId가 서버에 등록되지 않은 경우 자동으로 장치가 생성됩니다.

POST
api/v1/data

요청 본문

JSON
{
  "deviceId": "sensor-001",
  "data": {
    "temperature": 25.5,
    "humidity": 60
  },
  "_timestamp": "2025-01-08T12:00:00.000Z"
}
  • deviceId: 장치 ID
  • data: 서버에 전송할 데이터
  • _timestamp: (선택) 장치가 보고하는 측정 시간. 데이터 측정(생성) 시간과 서버 수신 시간이 다를 경우에 사용합니다. 오랜 시간이 경과한 데이터를 측정 시간에 맞도록 서버에 저장할 수 있습니다. ISO 8601 형식 또는 Unix 밀리초 타임스탬프. 생략 시 서버 수신 시간이 사용됩니다.

요청 예시

curl
curl -X POST "https://your-server/api/v1/data" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
  "deviceId": "sensor-001",
  "data": {
    "temperature": 25.5,
    "humidity": 60
  }
}'

응답

201 OK
{
  "deviceId": "sensor-001",
  "timestamp": "2025-01-08T12:00:00.000Z"
}

커맨드 API

서버에서 장치로 커맨드를 전송합니다.

장치가 명령을 받기 위해선 MQTT를 사용해야 합니다. MQTT 사용법

POST
api/v1/command

요청 본문

JSON
{
  "deviceId": "sensor-001",
  "command": "set_interval 30"
}
  • deviceId: 명령을 받을 장치 ID
  • command: 장치에 전송할 명령 문자열

커맨드 예시

명령 형식은 자유롭습니다. 장치가 파싱할 수 있는 어떤 문자열이든 가능합니다.

텍스트 명령
set_interval 30
JSON 명령
{"action": "update", "value": 100}

요청 예시

curl
curl -X POST "https://your-server/api/v1/command" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
  "deviceId": "sensor-001",
  "command": "set_interval 30"
}'

응답

202 OK
{
  "deviceId": "sensor-001",
  "command": "set_interval 30"
}

Rate Limit

각 외부 API 엔드포인트별 한도와 적용 단위입니다. 한도 초과 시 429 Too Many RequestsRetry-After 헤더(초 단위 대기)가 반환됩니다.

데이터 수집 (Ingestion)

메서드경로한도단위
POST/api/v1/data60회/분장치당
POST/api/v1/data (배치)30회/분API 키당
POST/api/v1/data/no-rules60회/분장치당
POST/api/v1/data/no-rules/batch30회/분API 키당

데이터 조회

메서드경로한도단위
GET/api/v1/devices60회/분API 키당
GET/api/v1/devices/{id}60회/분API 키당
GET/api/v1/devices/{id}/data10회/분API 키당
GET/api/v1/devices/{id}/data/chart10회/분API 키당
GET/api/v1/group60회/분API 키당
GET/api/v1/alerts/*60회/분API 키당

파일/명령

메서드경로한도단위비고
GET/api/v1/files/*300회/분장치당한 장치 데이터 일괄 다운로드용으로 여유롭게
POST/api/v1/command60회/분장치당

한도 초과 처리 예시

JavaScript

단위 의미

  • 장치당: 같은 디바이스에 대한 요청을 분당 N회까지. 다른 디바이스는 별도 카운트.
  • API 키당: 한 그룹(=한 API 키)이 통째로 분당 N회까지.

Swagger UI의 각 엔드포인트 상세 화면에서 429 Rate limit exceeded 응답으로 같은 정보를 확인할 수 있습니다.


Bulk Import API

대량의 과거 데이터를 한 번에 Import할 수 있는 관리자 전용 API입니다.

이 API는 관리자가 발급한 Admin Token이 필요합니다. Admin Token은 관리 > 보안 페이지에서 발급할 수 있습니다.

특징

  • Rate Limit 없음
  • 파서 처리 없음 (데이터가 그대로 저장됨)
  • 규칙 트리거 없음
  • 요청 당 최대 10,000건

Admin Token 인증

헤더설명
X-Admin-Tokenadm_xxxxx...Admin Token
POST
api/v1/data/bulk-import

요청 본문

JSON
{
  "groupId": "group-uuid",
  "deviceId": "sensor-001",
  "records": [
    {
      "data": { "temperature": 25.5, "humidity": 60 },
      "timestamp": "2025-01-01T00:00:00Z"
    },
    {
      "data": { "temperature": 26.0, "humidity": 58 },
      "timestamp": "2025-01-01T00:01:00Z"
    }
  ]
}
  • groupId: 대상 그룹 UUID (관리 > 그룹 또는 인증 정보에서 확인)
  • deviceId: 장치 ID (미등록 시 자동 생성)
  • records: 데이터 배열 (최대 10,000건)
    • data: 저장할 데이터
    • timestamp: (선택) ISO 8601 형식 또는 Unix 밀리초. 생략 시 서버 수신 시간 사용

요청 예시

curl
curl -X POST "https://your-server/api/v1/data/bulk-import" \
-H "Content-Type: application/json" \
-H "X-Admin-Token: adm_your_token_here" \
-d '{
  "groupId": "group-uuid",
  "deviceId": "sensor-001",
  "records": [
    { "data": { "temperature": 25.5 }, "timestamp": "2025-01-01T00:00:00Z" },
    { "data": { "temperature": 26.0 }, "timestamp": "2025-01-01T00:01:00Z" }
  ]
}'

응답

201 OK
{
  "total": 2,
  "success": 2,
  "failed": 0,
  "errors": []
}

10,000건 이상의 데이터를 Import할 경우, 여러 번의 요청으로 나누어 전송하세요.


다음 단계