HTTP API를 통해 장치 데이터를 전송하고 명령을 보낼 수 있습니다.
이 문서는 장치 연동에 필요한 기본 API를 간략히 설명합니다. 전체 API 명세는 Swagger 문서에서 확인하세요.
인증
모든 API는 X-API-Key 헤더로 인증합니다.
| 헤더 | 값 | 설명 |
|---|---|---|
X-API-Key | your-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: 장치 IDdata: 서버에 전송할 데이터_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: 명령을 받을 장치 IDcommand: 장치에 전송할 명령 문자열
커맨드 예시
명령 형식은 자유롭습니다. 장치가 파싱할 수 있는 어떤 문자열이든 가능합니다.
텍스트 명령
set_interval 30JSON 명령
{"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 Requests와 Retry-After 헤더(초 단위 대기)가 반환됩니다.
데이터 수집 (Ingestion)
| 메서드 | 경로 | 한도 | 단위 |
|---|---|---|---|
| POST | /api/v1/data | 60회/분 | 장치당 |
| POST | /api/v1/data (배치) | 30회/분 | API 키당 |
| POST | /api/v1/data/no-rules | 60회/분 | 장치당 |
| POST | /api/v1/data/no-rules/batch | 30회/분 | API 키당 |
데이터 조회
| 메서드 | 경로 | 한도 | 단위 |
|---|---|---|---|
| GET | /api/v1/devices | 60회/분 | API 키당 |
| GET | /api/v1/devices/{id} | 60회/분 | API 키당 |
| GET | /api/v1/devices/{id}/data | 10회/분 | API 키당 |
| GET | /api/v1/devices/{id}/data/chart | 10회/분 | API 키당 |
| GET | /api/v1/group | 60회/분 | API 키당 |
| GET | /api/v1/alerts/* | 60회/분 | API 키당 |
파일/명령
| 메서드 | 경로 | 한도 | 단위 | 비고 |
|---|---|---|---|---|
| GET | /api/v1/files/* | 300회/분 | 장치당 | 한 장치 데이터 일괄 다운로드용으로 여유롭게 |
| POST | /api/v1/command | 60회/분 | 장치당 |
한도 초과 처리 예시
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-Token | adm_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할 경우, 여러 번의 요청으로 나누어 전송하세요.
