API (Application Programming Interface) adalah sekumpulan aturan yang memungkinkan satu aplikasi berinteraksi dengan aplikasi lain. Dalam IoT, API digunakan untuk menghubungkan perangkat dengan server atau layanan cloud.
Penggunaan API bertujuan untuk saling berbagi data antar aplikasi yang berbeda, mempercepat proses pengembangan aplikasi dengan cara menyediakan sebuah function yang terpisah.
API bekerja sebagai perantara antara klien dan server. Klien mengirimkan request ke server melalui endpoint tertentu, dan server memberikan response berisi data atau hasil yang diminta.
API secara eksplisit memanfaatkan metodologi HTTP yang ditentukan oleh protokol RFC 2616. Permintaan ke API bisa menggunakan method GET untuk mengambil sumber daya, PUT untuk mengubah status atau memperbarui sumber daya, yang dapat berupa objek, file, atau blok, POST untuk membuat sumber daya itu, dan DELETE untuk menghapusnya.
REST (Representational State Transfer) adalah arsitektur API yang menggunakan protokol HTTP.
REST API memanfaatkan metode HTTP seperti GET, POST, PUT, dan
DELETE.
REST API adalah salah satu bentuk gaya arsitektural perangkat lunak yang didalamnya mendefinisikan beberapa aturan untuk membuat web service. REST API berisi aturan atau batasan yang dapat membatasi programmer untuk mengakses atau melakukan tindakan-tindakan tertentu pada sebuah database. Jadi REST API adalah sebuah Batasan arsitektur, bukan suatu protocol atau standar.
RESTful API diakses menggunakan protokol HTTP. Penamaan dan struktur URL yang konsisten akan menghasilkan API yang baik dan mudah untuk dimengerti developer. URL API biasa disebut endpoint dalam pemanggilannya.
Setiap request yang dilakukan terdapat metode yang dipakai agar server mengerti apa yang sedang di request client:
Header adalah metadata yang dikirimkan bersama request atau response dalam HTTP/REST API.
POST /api/sensor HTTP/1.1
Host: iot.example.com
Content-Type: application/json
Authorization: Bearer abc123token
User-Agent: ESP32/1.0
Content-Length: 27
{"temperature":28,"humidity":65}
HTTP Response Code adalah kode standarisasi dalam menginformasikan hasil request kepada client. Secara umum terdapat 3 kelompok yang biasa kita jumpai pada RESTful API yaitu :
| Kode | Arti |
|---|---|
| 200 | OK - Permintaan berhasil diproses. |
| 201 | Created - Data berhasil dibuat. |
| 400 | Bad Request - Permintaan tidak valid. |
| 401 | Unauthorized - Autentikasi diperlukan. |
| 404 | Not Found - Endpoint tidak ditemukan. |
| 500 | Internal Server Error - Kesalahan pada server. |
Response dari REST API biasanya dalam format JSON atau XML. JSON lebih banyak digunakan karena ringan dan mudah dipahami.
{
"status": "success",
"temperature": 28,
"humidity": 65
}
ThingSpeak merupakan platform open source IoT dan API untuk menyimpan dan mengambil data dari berbagai perangkat menggunakan protokol HTTP melalui Internet. ThingSpeak didukung perangkat lunak komputasi numberik yaitu Matlab. Menyediakan visualisasi data secara realtime dan dengan dukungan Matlab, memungkinkan untuk menambahkan data untuk keperluan analisis data dan pemrosesan. Website: https://thingspeak.com
Gunakan alamat email kampus milik kalian.
#include <WiFi.h>
#include "HTTPClient.h"
#include "DHTesp.h"
WiFiClient client;
const int DHT_PIN = 15;
DHTesp dhtSensor;
String thingSpeakAddress = "api.thingspeak.com";
String writeAPIKey;
String tsfield1Name;
String request_string;
void setup()
{
Serial.begin(9600);
WiFi.disconnect();
WiFi.begin("Wokwi-GUEST", "");
while ((!(WiFi.status() == WL_CONNECTED))) {
delay(300);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
}
void loop()
{
delay(2000);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float t = data.temperature;
float h = data.humidity;
kirim_thingspeak(t, h);
if (isnan(h) || isnan(t) ) {
Serial.println("Failed to read from DHT sensor!");
return;
}
}
void kirim_thingspeak(float suhu, float hum) {
if (client.connect("api.thingspeak.com", 80)) {
request_string = "/update?";
request_string += "key=";
request_string += "7NZLPX4HWGWWPHDS";
request_string += "&";
request_string += "field1";
request_string += "=";
request_string += suhu;
request_string += "&";
request_string += "field2";
request_string += "=";
request_string += hum;
Serial.println(String("GET ") + request_string + " HTTP/1.1\r\n" +
"Host: " + thingSpeakAddress + "\r\n" +
"Connection: close\r\n\r\n");
client.print(String("GET ") + request_string + " HTTP/1.1\r\n" +
"Host: " + thingSpeakAddress + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
while (client.available()) {
String line = client.readStringUntil('\r');
Serial.print(line);
}
Serial.println();
Serial.println("closing connection");
}
}