tutwuri
  • Error generating categories
  • Hosting
  • Indonesia
  • Website
  • Laravel
  • Bisnis
No Result
View All Result
tutwuri
  • Error generating categories
  • Hosting
  • Indonesia
  • Website
  • Laravel
  • Bisnis
No Result
View All Result
tutwuri
No Result
View All Result
Home API

Cara Membuat API dengan Laravel dan JWT: Keamanan dan Integrasi Aplikasi

Willow Emberwood by Willow Emberwood
June 13, 2025
in API, Integrasi, Keamanan, Laravel, Otentikasi
0
Share on FacebookShare on Twitter

Membuat API (Application Programming Interface) yang aman dan handal adalah kunci penting dalam pengembangan aplikasi modern. API memungkinkan berbagai aplikasi untuk berkomunikasi dan bertukar data secara efisien. Nah, jika kamu sedang mencari cara membuat API dengan Laravel dan JWT (JSON Web Token) untuk keamanan dan integrasi aplikasi yang kuat, kamu berada di tempat yang tepat! Artikel ini akan memandu kamu langkah demi langkah.

Apa Itu API dan Mengapa Harus Menggunakan Laravel dan JWT?

Sebelum kita masuk ke detail implementasi, mari kita pahami dulu apa itu API dan mengapa kombinasi Laravel dan JWT sangat populer.

API (Application Programming Interface) adalah sebuah interface yang memungkinkan dua aplikasi atau lebih untuk berkomunikasi dan bertukar data satu sama lain. Bayangkan seperti pelayan di restoran. Kamu (aplikasi) memesan makanan (data) ke pelayan (API) dan pelayan akan memberikan pesananmu (data) dari dapur (server).

Laravel adalah framework PHP yang sangat populer karena kemudahan penggunaannya, sintaks yang elegan, dan berbagai fitur bawaan yang membantu developer membangun aplikasi web dan API dengan cepat.

Related Post

Contoh Project Laravel Open Source: Inspirasi & Referensi Kode

November 30, 2025

Komunitas Laravel Developer Indonesia: Bergabung & Belajar Bersama!

November 30, 2025

Cara Deploy Aplikasi Laravel ke Server: Panduan Lengkap Hingga Website Online

November 30, 2025

Laravel Eloquent Relationship Tutorial Indonesia: Hubungan Antar Tabel dengan Mudah

November 30, 2025

JWT (JSON Web Token) adalah standar terbuka (RFC 7519) yang mendefinisikan cara aman untuk mengirimkan informasi antara dua pihak sebagai objek JSON. JWT sering digunakan untuk otentikasi dan otorisasi dalam API karena sifatnya yang stateless (tidak menyimpan sesi di server). Ini sangat cocok untuk aplikasi yang terdistribusi.

Mengapa Menggunakan Laravel dan JWT?

  • Keamanan: JWT menyediakan mekanisme otentikasi dan otorisasi yang aman, mencegah akses tidak sah ke API.
  • Skalabilitas: Laravel dengan JWT memungkinkan aplikasi kamu untuk diskalakan dengan mudah karena sifat JWT yang stateless.
  • Pengembangan Cepat: Laravel menyediakan banyak fitur yang mempercepat proses pengembangan API.
  • Standar Industri: JWT adalah standar yang diterima secara luas dan didukung oleh banyak bahasa pemrograman dan platform.
  • Integrasi yang Mudah: Laravel dan JWT mudah diintegrasikan dengan berbagai aplikasi frontend (seperti React, Vue.js, Angular) maupun backend.

Persiapan Lingkungan Pengembangan: Instalasi Laravel dan Konfigurasi Awal

Sebelum kita mulai coding, pastikan kamu sudah memiliki lingkungan pengembangan yang siap. Berikut langkah-langkahnya:

  1. Instal PHP: Pastikan kamu sudah menginstal PHP versi 7.3 atau lebih tinggi. Kamu bisa mengunduh PHP dari php.net.

  2. Instal Composer: Composer adalah dependency manager untuk PHP. Kamu bisa mengunduhnya dari getcomposer.org.

  3. Instal Laravel: Buka terminal atau command prompt dan jalankan perintah berikut untuk menginstal Laravel secara global:

    composer global require laravel/installer
  4. Buat Proyek Laravel Baru: Navigasi ke direktori tempat kamu ingin menyimpan proyek dan jalankan perintah berikut:

    laravel new nama-proyek-api

    Ganti nama-proyek-api dengan nama proyek yang kamu inginkan.

  5. Masuk ke Direktori Proyek:

    cd nama-proyek-api
  6. Konfigurasi Database: Buka file .env dan konfigurasi koneksi database. Sesuaikan nilai-nilai berikut sesuai dengan pengaturan database kamu:

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=nama_database
    DB_USERNAME=username_database
    DB_PASSWORD=password_database
  7. Migrasi Database: Jalankan perintah berikut untuk membuat tabel-tabel yang dibutuhkan oleh Laravel:

    php artisan migrate

Menginstal dan Mengkonfigurasi Package JWT (tymon/jwt-auth)

Selanjutnya, kita perlu menginstal dan mengkonfigurasi package tymon/jwt-auth untuk menangani otentikasi menggunakan JWT.

  1. Instal Package JWT: Jalankan perintah berikut di terminal:

    composer require tymon/jwt-auth
  2. Publish Konfigurasi: Setelah instalasi selesai, jalankan perintah berikut untuk mem-publish file konfigurasi jwt-auth:

    php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"
  3. Generate Secret Key: Jalankan perintah berikut untuk menghasilkan secret key yang akan digunakan untuk mengenkripsi JWT:

    php artisan jwt:secret

    Simpan secret key ini dengan aman. Jangan pernah membagikannya ke publik.

  4. Konfigurasi Model User: Buka file app/Models/User.php dan implementasikan interface TymonJWTAuthContractsJWTSubject:

    <?php
    
    namespace AppModels;
    
    use IlluminateContractsAuthMustVerifyEmail;
    use IlluminateDatabaseEloquentFactoriesHasFactory;
    use IlluminateFoundationAuthUser as Authenticatable;
    use IlluminateNotificationsNotifiable;
    use TymonJWTAuthContractsJWTSubject;
    
    class User extends Authenticatable implements JWTSubject
    {
        use HasFactory, Notifiable;
    
        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = [
            'name',
            'email',
            'password',
        ];
    
        /**
         * The attributes that should be hidden for arrays.
         *
         * @var array
         */
        protected $hidden = [
            'password',
            'remember_token',
        ];
    
        /**
         * The attributes that should be cast to native types.
         *
         * @var array
         */
        protected $casts = [
            'email_verified_at' => 'datetime',
        ];
    
        /**
         * Get the identifier that will be stored in the subject claim of the JWT.
         *
         * @return mixed
         */
        public function getJWTIdentifier()
        {
            return $this->getKey();
        }
    
        /**
         * Return a key value array, containing any custom claims to be added to the JWT.
         *
         * @return array
         */
        public function getJWTCustomClaims()
        {
            return [];
        }
    }

    Pastikan kamu mengimpor TymonJWTAuthContractsJWTSubject dan mengimplementasikan method getJWTIdentifier() dan getJWTCustomClaims().

Membuat Controller untuk Otentikasi (Register, Login, Logout)

Sekarang, kita akan membuat controller untuk menangani proses otentikasi pengguna.

  1. Buat Controller AuthController: Jalankan perintah berikut di terminal:

    php artisan make:controller AuthController
  2. Isi Controller dengan Logic Otentikasi: Buka file app/Http/Controllers/AuthController.php dan tambahkan kode berikut:

    <?php
    
    namespace AppHttpControllers;
    
    use IlluminateHttpRequest;
    use IlluminateSupportFacadesAuth;
    use AppModelsUser;
    use IlluminateSupportFacadesValidator;
    
    class AuthController extends Controller
    {
        /**
         * Register a new user.
         *
         * @param  IlluminateHttpRequest  $request
         * @return IlluminateHttpJsonResponse
         */
        public function register(Request $request)
        {
            $validator = Validator::make($request->all(), [
                'name' => 'required|string|between:2,100',
                'email' => 'required|string|email|max:100|unique:users',
                'password' => 'required|string|confirmed|min:6',
            ]);
    
            if ($validator->fails()) {
                return response()->json($validator->errors(), 400);
            }
    
            $user = User::create(array_merge(
                $validator->validated(),
                ['password' => bcrypt($request->password)]
            ));
    
            return response()->json([
                'message' => 'User successfully registered',
                'user' => $user
            ], 201);
        }
    
        /**
         * Log the user in.
         *
         * @param  IlluminateHttpRequest  $request
         * @return IlluminateHttpJsonResponse
         */
        public function login(Request $request)
        {
            $validator = Validator::make($request->all(), [
                'email' => 'required|string|email',
                'password' => 'required|string|min:6',
            ]);
    
            if ($validator->fails()) {
                return response()->json($validator->errors(), 422);
            }
    
            if (! $token = auth()->attempt($validator->validated())) {
                return response()->json(['error' => 'Unauthorized'], 401);
            }
    
            return $this->createNewToken($token);
        }
    
        /**
         * Log the user out (Invalidate the token).
         *
         * @return IlluminateHttpJsonResponse
         */
        public function logout()
        {
            auth()->logout();
    
            return response()->json(['message' => 'User successfully signed out']);
        }
    
        /**
         * Refresh a token.
         *
         * @return IlluminateHttpJsonResponse
         */
        public function refresh()
        {
            return $this->createNewToken(auth()->refresh());
        }
    
        /**
         * Get the authenticated User.
         *
         * @return IlluminateHttpJsonResponse
         */
        public function userProfile()
        {
            return response()->json(auth()->user());
        }
    
        /**
         * Get the token array structure.
         *
         * @param  string $token
         *
         * @return IlluminateHttpJsonResponse
         */
        protected function createNewToken($token)
        {
            return response()->json([
                'access_token' => $token,
                'token_type' => 'bearer',
                'expires_in' => auth()->factory()->getTTL() * 60,
                'user' => auth()->user()
            ]);
        }
    }

    Kode di atas berisi method untuk registrasi (register), login (login), logout (logout), refresh token (refresh), dan mendapatkan informasi profil pengguna (userProfile).

Mendefinisikan Route API untuk Otentikasi

Selanjutnya, kita perlu mendefinisikan route API untuk mengakses method-method otentikasi yang telah kita buat.

  1. Buka File routes/api.php: File ini adalah tempat kita mendefinisikan route API.

  2. Tambahkan Route Otentikasi: Tambahkan kode berikut ke file routes/api.php:

    <?php
    
    use IlluminateHttpRequest;
    use IlluminateSupportFacadesRoute;
    use AppHttpControllersAuthController;
    
    /*
    |--------------------------------------------------------------------------
    | API Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register API routes for your application. These
    | routes are loaded by the RouteServiceProvider within a group which
    | is assigned the "api" middleware group. Enjoy building your API!
    |
    */
    
    Route::post('/register', [AuthController::class, 'register']);
    Route::post('/login', [AuthController::class, 'login']);
    Route::post('/logout', [AuthController::class, 'logout']);
    Route::post('/refresh', [AuthController::class, 'refresh']);
    Route::get('/user-profile', [AuthController::class, 'userProfile'])->middleware('auth:api');
    

    Perhatikan bahwa route /user-profile dilindungi oleh middleware auth:api. Ini berarti hanya pengguna yang sudah terotentikasi (memiliki token JWT yang valid) yang dapat mengakses route ini.

Membuat Model dan Migrasi untuk Data (Contoh: Produk)

Untuk memberikan contoh yang lebih konkret, mari kita buat model dan migrasi untuk data produk.

  1. Buat Model Product: Jalankan perintah berikut di terminal:

    php artisan make:model Product -m

    Perintah ini akan membuat model Product dan migrasi yang terkait.

  2. Modifikasi Migrasi: Buka file migrasi yang baru dibuat (terletak di database/migrations) dan tambahkan definisi kolom untuk tabel products:

    <?php
    
    use IlluminateDatabaseMigrationsMigration;
    use IlluminateDatabaseSchemaBlueprint;
    use IlluminateSupportFacadesSchema;
    
    class CreateProductsTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('products', function (Blueprint $table) {
                $table->id();
                $table->string('name');
                $table->text('description');
                $table->decimal('price', 8, 2);
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('products');
        }
    }

    Kode di atas mendefinisikan tabel products dengan kolom name, description, dan price.

  3. Jalankan Migrasi: Jalankan perintah berikut untuk membuat tabel products di database:

    php artisan migrate
  4. Modifikasi Model Product: Buka file app/Models/Product.php dan tambahkan properti $fillable untuk menentukan kolom mana yang boleh diisi secara massal:

    <?php
    
    namespace AppModels;
    
    use IlluminateDatabaseEloquentFactoriesHasFactory;
    use IlluminateDatabaseEloquentModel;
    
    class Product extends Model
    {
        use HasFactory;
    
        protected $fillable = [
            'name',
            'description',
            'price',
        ];
    }

Membuat Controller untuk Mengelola Data Produk (CRUD Operations)

Sekarang, kita akan membuat controller untuk mengelola data produk (Create, Read, Update, Delete).

  1. Buat Controller ProductController: Jalankan perintah berikut di terminal:

    php artisan make:controller ProductController
  2. Isi Controller dengan Logic CRUD: Buka file app/Http/Controllers/ProductController.php dan tambahkan kode berikut:

    <?php
    
    namespace AppHttpControllers;
    
    use AppModelsProduct;
    use IlluminateHttpRequest;
    use IlluminateSupportFacadesValidator;
    
    class ProductController extends Controller
    {
        /**
         * Display a listing of the products.
         *
         * @return IlluminateHttpJsonResponse
         */
        public function index()
        {
            $products = Product::all();
            return response()->json($products);
        }
    
        /**
         * Store a newly created product in storage.
         *
         * @param  IlluminateHttpRequest  $request
         * @return IlluminateHttpJsonResponse
         */
        public function store(Request $request)
        {
            $validator = Validator::make($request->all(), [
                'name' => 'required|string|max:255',
                'description' => 'required|string',
                'price' => 'required|numeric|min:0',
            ]);
    
            if ($validator->fails()) {
                return response()->json($validator->errors(), 400);
            }
    
            $product = Product::create($request->all());
    
            return response()->json([
                'message' => 'Product successfully created.',
                'product' => $product
            ], 201);
        }
    
        /**
         * Display the specified product.
         *
         * @param  AppModelsProduct  $product
         * @return IlluminateHttpJsonResponse
         */
        public function show(Product $product)
        {
            return response()->json($product);
        }
    
        /**
         * Update the specified product in storage.
         *
         * @param  IlluminateHttpRequest  $request
         * @param  AppModelsProduct  $product
         * @return IlluminateHttpJsonResponse
         */
        public function update(Request $request, Product $product)
        {
            $validator = Validator::make($request->all(), [
                'name' => 'string|max:255',
                'description' => 'string',
                'price' => 'numeric|min:0',
            ]);
    
            if ($validator->fails()) {
                return response()->json($validator->errors(), 400);
            }
    
            $product->update($request->all());
    
            return response()->json([
                'message' => 'Product successfully updated.',
                'product' => $product
            ]);
        }
    
        /**
         * Remove the specified product from storage.
         *
         * @param  AppModelsProduct  $product
         * @return IlluminateHttpJsonResponse
         */
        public function destroy(Product $product)
        {
            $product->delete();
    
            return response()->json([
                'message' => 'Product successfully deleted.'
            ]);
        }
    }

    Kode di atas berisi method untuk mendapatkan daftar produk (index), membuat produk baru (store), menampilkan detail produk (show), memperbarui produk (update), dan menghapus produk (destroy).

Melindungi Route API Produk dengan JWT Middleware

Terakhir, kita perlu melindungi route API produk dengan JWT middleware sehingga hanya pengguna yang terotentikasi yang dapat mengaksesnya.

  1. Buka File routes/api.php:

  2. Tambahkan Route Produk dengan Middleware: Tambahkan kode berikut ke file routes/api.php:

    Route::group(['middleware' => 'auth:api'], function () {
        Route::resource('products', ProductController::class);
    });

    Kode di atas menggunakan Route::resource untuk secara otomatis membuat route untuk semua method CRUD di ProductController. Route::group dengan middleware auth:api memastikan bahwa semua route di dalam grup ini dilindungi oleh JWT middleware.

Pengujian API dengan Postman atau Insomnia

Setelah semua konfigurasi selesai, saatnya untuk menguji API kamu. Kamu bisa menggunakan aplikasi seperti Postman atau Insomnia untuk mengirimkan request ke API.

  1. Register Pengguna: Kirimkan request POST ke /api/register dengan data yang sesuai (nama, email, password, password confirmation).

  2. Login Pengguna: Kirimkan request POST ke /api/login dengan email dan password yang telah didaftarkan. Kamu akan menerima token JWT sebagai respons.

  3. Akses Route yang Dilindungi:

    • Salin token JWT yang kamu terima saat login.
    • Untuk mengakses route yang dilindungi (misalnya, /api/user-profile atau /api/products), tambahkan header Authorization ke request kamu.
    • Nilai header Authorization harus berupa Bearer <token>, di mana <token> adalah token JWT yang kamu salin.

    Jika token valid, kamu akan menerima respons yang sesuai. Jika token tidak valid atau tidak ada, kamu akan menerima error 401 Unauthorized.

Tips Tambahan untuk Keamanan dan Pengembangan API yang Lebih Baik

  • Validasi Input: Selalu validasi input dari pengguna untuk mencegah serangan SQL injection dan cross-site scripting (XSS).
  • Gunakan HTTPS: Pastikan API kamu hanya dapat diakses melalui HTTPS untuk mengenkripsi data yang dikirimkan antara klien dan server.
  • Rate Limiting: Implementasikan rate limiting untuk membatasi jumlah request yang dapat dikirimkan oleh pengguna dalam jangka waktu tertentu. Ini dapat membantu mencegah serangan Denial of Service (DoS).
  • Logging dan Monitoring: Implementasikan logging dan monitoring untuk melacak aktivitas API dan mendeteksi potensi masalah atau serangan.
  • Versioning API: Gunakan versioning API (misalnya, /api/v1/products, /api/v2/products) untuk memungkinkan perubahan API tanpa merusak aplikasi yang sudah ada.
  • Dokumentasi API: Buat dokumentasi API yang jelas dan lengkap untuk memudahkan developer lain menggunakan API kamu. Kamu bisa menggunakan tools seperti Swagger/OpenAPI untuk membuat dokumentasi API secara otomatis.

Kesimpulan

Membuat API dengan Laravel dan JWT adalah cara yang efektif dan aman untuk membangun aplikasi modern. Dengan mengikuti langkah-langkah yang telah dijelaskan di atas, kamu dapat membuat API yang handal, mudah diskalakan, dan aman dari berbagai ancaman keamanan. Jangan lupa untuk selalu memperhatikan tips tambahan yang telah diberikan untuk memastikan API kamu aman dan mudah digunakan oleh developer lain. Selamat mencoba dan semoga berhasil!

Tags: API ImplementationAPI SecurityAPI TutorialApplication IntegrationJWT AuthenticationLaravel APILaravel DevelopmentPHPREST APIweb development
Willow Emberwood

Willow Emberwood

Related Posts

Contoh

Contoh Project Laravel Open Source: Inspirasi & Referensi Kode

by Elara Meadowlight
November 30, 2025
Belajar

Komunitas Laravel Developer Indonesia: Bergabung & Belajar Bersama!

by Elara Meadowlight
November 30, 2025
Deployment

Cara Deploy Aplikasi Laravel ke Server: Panduan Lengkap Hingga Website Online

by Jasper Nightshade
November 30, 2025
Next Post

Cara Membuat API dengan Laravel dan JWT: Langkah Demi Langkah dan Contoh Kode

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recommended

Contoh Implementasi AI dalam Bisnis UKM: Studi Kasus dan Peluang Bisnis

June 20, 2025

Contoh Project Web Development Sederhana: Inspirasi dan Tutorial Lengkap

June 12, 2025

Cara Implementasi Authentication di Laravel: Keamanan Website Terjamin

August 1, 2025

Contoh Website Company Profile Sederhana dengan HTML CSS: Inspirasi Desain Modern

July 30, 2025

Cara Meningkatkan Penjualan dengan CRM: Strategi Efektif untuk Pertumbuhan Bisnis

June 5, 2026

Perbandingan CRM Open Source dan Berbayar: Pilih Sesuai Anggaran dan Kebutuhan

June 5, 2026

Contoh Implementasi CRM yang Sukses di Indonesia: Inspirasi untuk Bisnis Anda

June 5, 2026

Training CRM untuk Tim Sales dan Marketing: Tingkatkan Kompetensi dan Produktivitas

June 5, 2026

tutwuri

Our media platform offers reliable news and insightful articles. Stay informed with our comprehensive coverage and in-depth analysis on various topics.
Read more »

Recent Posts

  • Cara Meningkatkan Penjualan dengan CRM: Strategi Efektif untuk Pertumbuhan Bisnis
  • Perbandingan CRM Open Source dan Berbayar: Pilih Sesuai Anggaran dan Kebutuhan
  • Contoh Implementasi CRM yang Sukses di Indonesia: Inspirasi untuk Bisnis Anda

Categories

  • AI
  • Akuntansi
  • Algoritma
  • Alternatif
  • Analisis
  • and separated by commas: Hosting
  • API
  • Aplikasi
  • Asuransi
  • Authentication
  • Backend
  • Bahasa Indonesia
  • Belajar
  • Berita
  • Biaya
  • Bisnis
  • Blog
  • Bootstrap
  • Branding
  • Bulanan
  • Business
  • Cepat
  • Chatbot
  • ChatGPT
  • Cloud
  • CMS
  • Command
  • Contoh
  • CPanel
  • CRM
  • CRUD
  • CSS
  • Data
  • Database
  • Debugging
  • Deployment
  • Desain
  • Design
  • Developer
  • Development
  • Digital
  • Dokumentasi
  • Domain
  • Download
  • Dukungan
  • E-commerce
  • Efektif
  • Efektivitas
  • Efisiensi
  • Email
  • Error
  • Error generating categories
  • Etika
  • Event
  • Excel
  • Fashion
  • File
  • Fitur
  • Fleksibilitas
  • Framework
  • Freelance
  • Frontend
  • Fungsional
  • Gambar
  • Game
  • Garansi
  • Generatif
  • Google
  • Gratis
  • Harga
  • Here are 5 categories
  • Here are 5 categories based on the article titles
  • Hosting
  • HTML
  • Ide
  • Implementasi
  • Indonesia
  • Industri
  • Inovasi
  • Inspirasi
  • Integrasi
  • Investasi
  • Jakarta
  • JavaScript
  • Kapasitas
  • Karir
  • Kasus
  • Keamanan
  • Keandalan
  • Keberhasilan
  • Kebutuhan
  • Kecepatan
  • Kepuasan
  • Kerugian
  • Kesehatan
  • Kinerja
  • Kolaborasi
  • Komunikasi
  • Komunitas
  • Konfigurasi
  • Konstruksi
  • Konten
  • Kota
  • Kreativitas
  • Kualitas
  • Kustomisasi
  • Laporan
  • Laravel
  • Layanan
  • Lokasi
  • Machine Learning
  • Mahasiswa
  • Manajemen
  • Manajemen Proyek
  • Manfaat
  • Manufaktur
  • Marketing
  • Masa Depan
  • Masyarakat
  • Media Sosial
  • Migrasi
  • Migration
  • Mobile
  • Model
  • Monitoring
  • Murah
  • Negosiasi
  • Node JS
  • Online
  • Open Source
  • Optimasi
  • Otentikasi
  • Otomatis
  • Otomatisasi
  • Otomotif
  • Panduan
  • Pariwisata
  • Payment Gateway
  • Pekerjaan
  • Pelajar
  • Pelanggan
  • Pelatihan
  • Peluang
  • Pemasaran
  • Pemrograman
  • Pemula
  • Pendidikan
  • Pengambilan Keputusan
  • Pengembangan
  • Pengguna
  • Penggunaan
  • Penghasilan
  • Penipuan
  • Penjualan
  • Perbandingan
  • Perbedaan
  • Performa
  • Personalisasi
  • Pertumbuhan
  • Perubahan
  • PHP
  • Pilihan
  • Plugin
  • Portfolio
  • Prediksi
  • Produktivitas
  • Profesional
  • Programmer
  • Promo
  • Prospek
  • Python
  • Queue
  • Rekomendasi
  • Responsive
  • Retensi
  • Review
  • SEO
  • Sertifikat
  • Server
  • Sistem
  • Skalabilitas
  • Skill
  • Software
  • Solusi
  • SSD
  • SSL
  • Stabilitas
  • Startup
  • Strategi
  • Syarat
  • Tanggung Jawab
  • Tantangan
  • Technology
  • Teknologi
  • Template
  • Terbaik
  • Terbaru
  • Terpercaya
  • Testimoni
  • Tips
  • Tools
  • Traffic
  • Trafik
  • Tren
  • Troubleshooting
  • Tutorial
  • UI
  • UKM
  • Unlimited
  • Upload
  • Uptime
  • using one word per category: Software
  • using only one word from the list provided per category
  • Validasi
  • Video
  • VPS
  • Web
  • Website
  • WordPress

Resource

  • About us
  • Contact Us
  • Privacy Policy

© 2024 tutwuri.

No Result
View All Result
  • Error generating categories
  • Hosting
  • Indonesia
  • Website
  • Laravel
  • Bisnis

© 2024 tutwuri.