###### tags : `iot` `api-server`
---
title: "Dokumentasi API IoT-Server"
---
# Pendahuluan
## 1. Daftar Isi
[TOC]
## 2. Petunjuk Umum
1. Base Url : `http://<your-ip>:<port>`
2. untuk mendapatkan akses api, setiap request perlu disertakan token pada header.
3. token diperoleh dengan mengirimkan email dan password ketika login.
4. Respon Kode:
| No | Kode | Keterangan | Deskripsi |
| :-: | :--: | :-----------: | :-------------------------------------------------------------------------------: |
| 1 | 200 | Sukses | |
| 2 | 201 | Sukses | |
| 3 | 400 | Bad Request | Kesalahan berada di sisi klien |
| 4 | 401 | Not Authorize | client tidak menyertakan token pada saat melakukan request atau token tidak valid |
| 5 | 403 | Forbidden | client tidak bisa melakukan request |
| 6 | 404 | Not Found | Data tidak ditemukan |
| 7 | 500 | Server Error | Terjadi kesalahan di server |
5. Format Reaspons
```
Simple Response :
{
count: <number>,
data: <type-Object of Array || Array of Object>
}
Error Response :
{
message: <error>
}
```
## 3. Diagram Alir Request
#### Request Token
```sequence
Note left of Client: email & password
Client->Server: request token
Note right of Client: validation payload
Server->Database: query database
Note right of Server: cek email
Database->Server: send data
Server->Client: send response
Note left of Client: data
```
#### General Request
```sequence
Note left of Client: payload + token
Client->Server: send request
Note right of Client: validate request data
Server->Database: query database
Database->Server: send data
Server->Client: send data
Note left of Client: data
```
# REST API
## 1. Auth Token
Endpoint : `<base_url>`
|No|Metode|Endpoint|Header|Body|Deskripsi|
|:----:|:----:|:-----:|:-----:|:-----:|:-----:|
|1|Post|`<endpoint>/user/login`|-|data|Mendapatkan token & info user|
> Catatan :
> Masa berlaku token adalah 1 hari.
> User bisa mendapatkan token jika sudah terdaftar di aplikasi dan telah melakukan verifikasi email.
##### Deskripsi Body
| No | Item | Tipe Data | Catatan |
| :-: | :-----------: | :-------: | :-----------------------------------------------: |
| 1 | data | String | string berupa file encrypt yang memadukan base64 dengan libary menggunakan secreat-key |
## 2. User
### List API User
|No.|Metode| Endpoint | params | Query | Body | Deskripsi |
|---|------| -------- | ------ | ------ | ----- | ------- |
|1. | POST |`<endpoint>/user/login`| | | data* | mendapatkan token |
|2. | POST | `<endpoint>/user` | | | username*, email*, password* | mendaftarkan user baru |
|3. | GET | `<endpoint>/user` | | | | medapatkan semua list users|
|4. | GET | `<endpoint>/user` | nama user | | | medapatkan user berdasaran nama|
|5. | DELETE | `<endpoint>/user` | id user | | | menghapus user |
|6. | PUT | `<endpoint>/user` | | | username, name, last password, new password, email | update data user |
|7. | PUT | `<endpoint>/profile/` | username | | file* | update foto profile user |
> note:
> menambah user dan login tidak diperlukan token ketika request.
### Deskripsi API User
|No.| Item | Tipe Data | Catatan |
|---| ---- | ---- | ---- |
|1. | data | String | merupakan data email dan password yang di encrypt |
|2. | username, email, password| String | |
|3. | email, new / last password| String | |
|4. | file | file data | |
## 3. Aplikasi
### List API Aplikasi
|No.|Metode| Endpoint | params | Query | Body | Deskripsi |
|---|------| -------- | ------ | ------ | ---- | --------- |
|1. | GET | `<endpoint>/app` | | | | get list application user |
|2. | GET | `<endpoint>/app/options` | | | | get list options menu select |
|3. | POST | `<endpoint>/app`| | | application* | membuat aplikasi baru |
|4. | DELETE | `<endpoint>/app` | | application* | | hapus aplikasi |
### Deskripsi API Aplikasi
|No.| Item | Tipe Data | Catatan |
|---| ---- | --------- | ------- |
|1. | application | String | nama aplikasi |
## 4. Device
### List API Device
|No.|Metode| Endpoint | params | Query | Body | Deskripsi |
|---|------| -------- | ------ | ------ | ---- | --------- |
|1. | GET | `<endpoint>/device/list` | | | | mendapatkan list device |
|2. | GET | `<endpoint>/device/count` | | | | mendapatkan jumlah device |
|3. | GET | `<endpoint>/device` | | device*, limit, skip | | mendapatkan data device |
|4. | GET | `<endpoint>/device/options` | | application* | | mendapatkan list options device |
|5. | POST | `<endpoint>/app/device` | | | name*, application* | membuat device baru |
|6. | DELETE | `<endpoint>/app/device`| | application*, name* | | hapus device |
### Deskripsi API Device
|No.| Item | Tipe Data | Catatan |
|---| ---- | --------- | ------- |
|1. | application | String | nama aplikasi |
|2. | device, name | String | nama device |
|3. | limit | number | jumlah limit data |
|4. | skip | number | data yang akan dilompati |
## 5. Widget
### List API Widget
|No.|Metode| Endpoint | params | Query | Body | Deskripsi |
|---|------| -------- | ------ | ------ | ---- | --------- |
|1. | GET | `<endpoint>/widget/list`| | | | mendapatkan list widget |
|2. | GET | `<endpoint>/widget/graph` | | data*, application*, device*, widget_type* | | mendapatkan data grafik |
|3. | POST | `<endpoint>/widget/create` | | | data*, application*, device*, widget_type* | membuat widget baru |
|4. | DELETE | `<endpoint>/widget/graph` | | data*, application*, device*, widget_type* | | hapus widget |
> Note:
> untuk pilihan hanya baru terdapat grafik
### Deskripsi API Widget
|No.| Item | Tipe Data | Catatan |
|---| ---- | --------- | ------- |
|1. | data | String | nama data pada sensor |
|2. | application | String | nama Aplikasi |
|3. | device | String | nama device |
|4. | widget_type | String | tipe widget yang dibuat |