Membuat Restful API Sederhana
13
Data-data sektoral yang terpencar pada aneka OPD, Unor, dalam wujud spreadsheet, SiLo data, tak ayal mengakibatkan panjangnya proses birokrasi dan tata naskah untuk pertukaran data, baik lintas sektoral maupun lintas jenjang pemerintahan konkuren. Secara teori, ini hanyalah teks yang menerangkan suatu permasalahan, namun secara praktikal ini adalah masalah yang tidak menunjang kebutuhan dan ekspektasi tuntutan era disrupsi teknologi. Pertukaran data secara praktikal telah dapat dilakukan lebih dinamis dengan teknologi Application Programming Interface (API), untuk itu tulisan ini ada untuk memberikan pandangan terkait konsep dasar API dengan serangkaian praktik dengan requirement yang sederhana.
Tujuan
- memudahkan kolaborasi/interoperabilitas (INA Digital, SPL-IPPD, SIA, Super App Provinsi, Dashboard Kutim, Satu Data Kutim, SiLo Data Lainnya)
Requirement
- [env] web server
- [app] laravel project, db: blog, table: blog, atribut: judul, isi, created_at, updated_at, deleted_at
- [tools] VSCode + REST Client
- [helper] opsional, Chat Bot (Copilot pada Ms. Edge/Gemini/ChatGPT/Meta AI, dsb)
Langkah-langkah
Langkah 1. Persiapan Project
- buat project Laravel baru
laravel new blog
atau
composer create-project laravel/laravel blog
- konfigurasi database di file .env
DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=blogDB_USERNAME=rootDB_PASSWORD=
Langkah 2. Membuat Migration
- jalankan perintah
php artisan make:migration create_blogs_table
- edit file migration di
database/migration/…create_blogs_table.php
public function up(){Schema::create('blogs', function (Blueprint $table) {$table->id();$table->string('judul');$table->text('isi');$table->timestamps(); // otomatis buat created_at & updated_at$table->softDeletes(); // otomatis buat deleted_at});}
- lalu jalankan
php artisan migrate
Langkah 3. Membuat Model
php artisan make:model Blog
- edit app/Models/Blog.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;use Illuminate\Database\Eloquent\SoftDeletes;
class Blog extends Model{use SoftDeletes;
protected $fillable = ['judul', 'isi'];}
Langkah 4. Membuat Controller
php artisan make:controller BlogController --api
- edit
app/Http/Controllers/BlogController.php
namespace App\Http\Controllers;
use App\Models\Blog;use Illuminate\Http\Request;
class BlogController extends Controller{// GET /api/blogspublic function index(){return Blog::all();}
// POST /api/blogspublic function store(Request $request){$validated = $request->validate(['judul' => 'required|string|max:255','isi' => 'required|string',]);
$blog = Blog::create($validated);return response()->json($blog, 201);}
// GET /api/blogs/{id}public function show($id){return Blog::findOrFail($id);}
// PUT /api/blogs/{id}public function update(Request $request, $id){$blog = Blog::findOrFail($id);$blog->update($request->only(['judul', 'isi']));return response()->json($blog, 200);}
// DELETE /api/blogs/{id}public function destroy($id){$blog = Blog::findOrFail($id);$blog->delete();return response()->json(null, 204);}}
Langkah 5. Definisikan Route
- edit
routes/api.php
use App\Http\Controllers\BlogController;
Route::apiResource('blogs', BlogController::class);
Langkah 6. Uji API
Gunakan REST Client (Ctrl+Shift+X dan install pada VSCode, setelahnya restart VSCode untuk dampak yang diharapkan), atau Postman atau cURL
- GET
/api/blogs: ambil semua blog - POST
/api/blogs: blog buat baru
{"judul": "Belajar Laravel","isi": "Ini adalah isi blog pertama."}
- GET
/api/blogs/1: ambil blog dengan ID 1 - PUT
/api/blogs/1: update blog - DELETE
/api/blogs/1: hapus blog (soft delete)
Sample kode jika menggunakan REST Client (/tests/api.php)
### Ambil semua blogGET http://localhost:8000/api/blogs
### Buat blog baruPOST http://localhost:8000/api/blogsContent-Type: application/json
{"judul": "Belajar Laravel","isi": "Ini adalah isi blog pertama."}
### Ambil blog dengan ID tertentuGET http://localhost:8000/api/blogs/1
### Update blogPUT http://localhost:8000/api/blogs/1Content-Type: application/json
{"judul": "Update Judul","isi": "Update isi blog."}
### Hapus blogDELETE http://localhost:8000/api/blogs/1
- Setiap blok akan muncul tombol namun bentuknya hanya teks
Send Request. Klik tombol untuk mendapatkan respons. Contoh letak tombol
### Ambil semua blogSend RequestGET http://localhost:8000/api/blogs
Catatan Tambahan
- karena menggunakan
SoftDeletes, data tidak benar-benar hilang, hanya diberideleted_at - jika ingin menampilkan data termasuk yang terhapus, gunakan
Blog::withTrashed()->get();
- untuk mengembalikan data yang terhapus
Blog::withTrashed()->find($id)->restore();