Kategori
IoT

Praktek Rest API

API (Application Programming Interface) yaitu sebuah software yang memungkinkan para developer untuk mengintegrasikan dan mengizinkan dua aplikasi yang berbeda secara bersamaan untuk saling terhubung satu sama lain dan bertukar data.

Penggunaan API bertujuan untuk saling berbagi data antar aplikasi yang berbeda, mempercepat proses pengembangan aplikasi dengan cara menyediakan sebuah function yang terpisah.

Cara Kerja API

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)

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.

Komponen dalam REST API

  • URL Design : 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.
  • HTTP Verbs : Setiap request yang dilakukan terdapat metode yang dipakai agar server mengerti apa yang sedang di request client :
    1. GET : GET adalah metode HTTP Request yang paling mudah, metode ini digunakan untuk membaca atau mendapatkan data dari sumber.
    2. POST : POST adalah metode HTTP Request yang digunakan untuk membuat data baru dengan menyisipkan data dalam body saat request dilakukan.
    3. PUT : PUT adalah metode HTTP Request yang biasanya digunakan untuk melakukan update data resource.
    4. DELETE : DELETE adalah metode HTTP Request yang digunakan untuk menghapus suatu data pada resource.
  • HTTP Response Code : 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 :
    1. 2XX : adalah response code yang menampilkan bahwa request berhasil.
    2. 4XX : adalah response code yang menampilkan bahwa request mengalami kesalahan pada sisi client.
    3. 5XX : adalah response code yang menampilkan bahwa request mengalami kesalahan pada sisi server.
  • Format Response : Setiap request yang dilakukan client akan menerima data response dari server, response tersebut biasanya berupa data XML (Extensible Markup Language)  ataupun JSON (JavaScript Object Notation). Setelah mendapatkan data response tersebut barulah client bisa menggunakannya dengan cara memparsing data tersebut dan diolah sesuai kebutuhan.

Cara Kerja REST API

API secara eksplisit memanfaatkan metodologi HTTP yang ditentukan oleh protokol RFC 2616. Permintaan ke API bisa menggunakan 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.

Praktek REST API dengan Thingspeak

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.

https://thingspeak.com

Memulai Thingspeak

•Login menggunakan akun yang sudah dibuat.

•Pastikan tampilan seperti pada gambar.

•Thingspeak siap untuk digunakan.

Membuat Channel Thingspeak

  • Klik New Channel.
  • Masukkan nama channel dan deskripsi.
  • Pada Field 1, isikan variabel yang akan digunakan.
  • Scroll ke bawah dan klik Save Channel.

Rangkaian Program

Kode Program

#include "WiFi.h" 
#include "DHTesp.h"

WiFiClient client;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";

const int DHT_PIN = 15;
DHTesp dhtSensor;

String thingSpeakAddress = "api.thingspeak.com";
String writeAPIKey;
String tsfield1Name;
String request_string;

void kirim_thingspeak(float suhu, float hum) {
  if (client.connect("api.thingspeak.com", 80)) {
    request_string = "/update?";
    request_string += "key=";
    request_string += "BQT4K5TUFL427H83";
    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");
  }
}

void setup()
{
  Serial.begin(9600);
  //WiFi.disconnect();
  WiFi.begin(ssid,pass);
  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;
  }
}

Jalankan Program

  • Masukkan API key pada baris request_string
  • Program tersebut digunakan untuk mengirimkan data Sensor DHT22 ESP32 pada Wokwi ke server Thingspeak.
  • Tambahkan Library DHT sensor ESPx dengan klik Library Manager.
  • Pengiriman data berdasarkan format REST API yang sudah ditentukan oleh Thingspeak.
  • Masuk ke Menu API Keys.
  • Write API Key digunakan untuk mengirimkan data ke server Thingspeak.
  • Read API Key digunakan untuk mengambil data pada server Thingspeak.

Memulai Simulasi

  • Jalankan simulasi dengan klik Start Simulation.
  • Atur suhu dan kelembaban sesuai dengan keinginan untuk melihat perubahan data yang dikirimkan ke server Thingspeak.
  • Pastikan koneksi dengan server berhasil ditandai dengan muncul tulisan di serial monitor pada gambar.

Monitoring di Thingspeak

  • Buka Channel Thingspeak.
  • Masuk ke menu Private View.
  • Pastikan data berhasil terkirim ditandai dengan muncul nilai pada Field dan membentuk grafik.

API Response

  • Kita dapat melihat data yang dikirim lengkap dengan status API response yang diberikan server.
  • Perintah GET /update?key merupakan perintah untuk mengirimkan data berdasarkan API Key dan data disimpan pada field1 dengan nilai 17.20
  • Response yang diberikan oleh server yaitu HTTP/1.1 200 OK yang merupakan notifikasi bahwa pengiriman sukses (kode 200) dengan menggunakan protokol HTTP.
  • Notifikasi lengkap dengan waktu pengiriman data dan request id.

Ref : [1][2][3][4]