Tampilkan postingan dengan label crud. Tampilkan semua postingan

Membuat RESTful API CRUD sederhana dengan PHP

selamat siang kali ini kita akan membuat RESTful API CRUD sederhana dengan PHP

Apa itu API? 

API(Aplication Programming Interface) adalah sebuah web service yang berguna untuk menjembatani aplikasi dengan database, API tidak tergantung pada bahasa pemrograman tertentu, dengan API kita bisa berkomunikasi dengan aplikasi yang berbeda pemrogramanya, Misalnya Aplikasi A menggunakan bahasa PHP dan Aplikasi B menggunakan bahasa Java kita bisa mengakses informasi informasi aplikasi A untuk ditampilkan di aplikasi B dengan bantuan API, jadi kita tidak harus tau dulu database nya apa struktur table nya bagaimana tinggal menggunakan API yang sudah disediakan oleh developer pembuat API di Aplikasi itu. untuk menggunakan API kita harus melihat dulu dokumentasi dari si pembuat API nya, kita tidak bisa berkreatif membuat cara sendiri jadi misalnya untuk mengakses data apa saja yang dapat diakses bagaimana cara mengaksesnya, apakah bersifat publik atau harus menggunakan token semua tergantung si pembuat API nya jadi kita harus membaca dulu dokumentasinya. format yang dipakai biasanya berbentuk XML atau JSON tetapi yang paling sering kita temui berbentuk JSON (Javascript Object Notation). contoh API yang biasa dipakai untuk login adalah facebook misalnya pada situs stackoverflow kita bisa login lewat facebook atau google, API ini tidak tergantung pada satu bahasa pemrograman misalnya facebook menggunakan bahasa PHP dan stackoverflow menggunakan javascript bisa terhubung dan untuk databasenya stackoverflow tidak harus mempunyai database yang sama digunakan oleh facebook. metode yang biasa digunakan dalam API ini biasanya GET, POST, PUT, PATCH, DELETE dll

Jenis-Jenis API

API ada dua jenis yaitu SOAP dan REST tetapi yang paling populer adalah REST API

Softwre untuk membuat API 

untuk membuat API yang anda perlukan hanya text editor, browser, plugin JSON viewer untuk melihat tampilan JSON agar lebih mudah dibaca, POSTMAN untuk mengetest API nya

Buat dulu database nya seperti ini:

-- phpMyAdmin SQL Dump

-- version 4.5.1

-- http://www.phpmyadmin.net

--

-- Host: 127.0.0.1

-- Generation Time: 23 Okt 2018 pada 13.23

-- Versi Server: 10.1.16-MariaDB

-- PHP Version: 5.6.24



SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

SET time_zone = "+00:00";





/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8mb4 */;



--

-- Database: `cruds`

--



-- --------------------------------------------------------



--

-- Struktur dari tabel `mahasiswa`

--



CREATE TABLE `mahasiswa` (

  `npm` varchar(10) NOT NULL,

  `nama` varchar(100) NOT NULL,

  `prodi` varchar(50) NOT NULL,

  `fakultas` varchar(50) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1;



--

-- Dumping data untuk tabel `mahasiswa`

--



INSERT INTO `mahasiswa` (`npm`, `nama`, `prodi`, `fakultas`) VALUES

('000000', 'zero', 'zero prodi', 'zero fakultas'),

('1100001110', 'Dhani', 'Kedokteran', 'Dokter'),

('1111', 'iwan setiawan', 'teknik otomotif', 'teknik '),

('1201110012', 'Indra', 'Sistem Informasi', 'Teknik'),

('12346545', 'Ahmad Fauzila', 'kehutanan', 'ilmu kehutanan'),

('1500110001', 'Jhon', 'Teknik Informatika', 'Teknik'),

('2222', 'Dudi', 'Teknik sipil', 'teknik'),

('88888', 'Delapan Enam', 'Delapan 999', 'Densus 88');



--

-- Indexes for dumped tables

--



--

-- Indexes for table `mahasiswa`

--

ALTER TABLE `mahasiswa`

  ADD PRIMARY KEY (`npm`);



/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
?>


Langkah Pertama membuat koneksi ke database



define('HOSTNAME','localhost');

define('USERNAME','root');

define('PASSWORD','');

define('DB_NAME','cruds');



$koneksi = new mysqli(HOSTNAME, USERNAME, PASSWORD, DB_NAME) or die (mysqli_errno());



?>


selanjutnya kita akan membuat CREAT



include_once('connection.php');



$npm = addslashes(htmlentities($_POST['npm']));

$nama = addslashes(htmlentities($_POST['nama']));

$prodi = addslashes(htmlentities($_POST['prodi']));

$fakultas = addslashes(htmlentities($_POST['fakultas']));



$insert = "INSERT INTO mahasiswa(npm,nama,prodi,fakultas) VALUES ('$npm','$nama','$prodi','$fakultas')";



$exeinsert = mysqli_query($koneksi,$insert);



$response = array();



if($exeinsert)

{

  $response['code'] =1;

  $response['message'] = "Success! Data Inserted";

}else{

  $response['code'] =0;

  $response['message'] = "Failed! Data Not Inserted";

}



echo json_encode($response);

?>



untuk mengetest nya bisa menggunakan POSTMAN atau melalui browser tetapi kalau melalui browser agak ribet karena harus memasukan url yang panjang

Kemudian kita akan membuat VIEW yaitu API untuk menampilkan data dari program CRUD nya


include_once('connection.php');
$query = "SELECT * FROM mahasiswa";
$result = mysqli_query($koneksi,$query);
$array_data = array();
while($baris = mysqli_fetch_assoc($result))
{
  $array_data[]=$baris;
}

echo json_encode($array_data);
?>



selanjutnya untuk UPDATE seperti dibawah


require_once('connection.php');

$npm = addslashes(htmlentities($_POST['npm']));

$nama = addslashes(htmlentities($_POST['nama']));
$prodi = addslashes(htmlentities($_POST['prodi']));
$fakultas = addslashes(htmlentities($_POST['fakultas']));

$getdata = mysqli_query($koneksi,"SELECT * FROM mahasiswa WHERE npm='$npm'");
$rows = mysqli_num_rows($getdata);

$update = "UPDATE mahasiswa SET nama='$nama',prodi='$prodi',fakultas='$fakultas' WHERE npm='$npm'";
$exequery = mysqli_query($koneksi,$update);

$respose = array();

if($rows > 0)
{
  if($exequery)
  {
    $respose['code'] = 1;
    $respose['message'] = "Updated Success";
  }else{
    $respose['code'] = 0;
    $respose['message'] = "Updated Failed";
  }
}else{
  $respose['code'] = 0;
  $respose['message'] = "Updated Failed, Not data selected";
}
echo json_encode($respose);
?>


terakhir untuk DELETE seperti berikut:



include_once('connection.php');

$npm = addslashes(htmlentities($_POST['npm']));
$getdata = mysqli_query($koneksi,"SELECT * FROM mahasiswa WHERE npm = '$npm'");
$rows = mysqli_num_rows($getdata);

$delete = "DELETE FROM mahasiswa WHERE npm = '$npm'";
$exedelete = mysqli_query($koneksi,$delete);

$respose = array();
if($rows > 0)
{
  if ($exedelete) {
    $respose['code'] = 1;
    $respose['message'] = "Deleted Success";
  }else{
    $respose['code'] = 0;
    $respose['message'] = "Failed to Delete";
  }
}else{
  $respose['code'] = 0;
  $respose['message'] = "Failed to Delete, data Not Found";
}


echo json_encode($respose);
?>



selesai sudah sudah API CRUD nya Create Read Update Delete sudah lengkap

untuk menyembunyikan susunan file pada folder kita bisa menggunakan .htaccess isinya hanya seperti ini Options -Indexes karena kita tidak memiliki file index jadi file-file yang ada dalam folder kita akan ditampilkan semua kalau API nya sudah kita rilis atau diupload ke server akan sangat berbahaya karena hacker akan mudah melihat susunan file kita selain dengan htaccess kita juga bisa membuat file index yang isi nya access denied misalnya


Membuat Aplikasi CRUD SQLite dengan Content Provider dan Circular Reveal Animation di Android Part4



di part ke3 kita sudah membuat beberapa class untuk menambahkan data, menampilkan data menampilkan details data dan mengedit data. sekarang kita akan menambahkan class Searchable activity untuk fungsi pencarian data CRUD kita

pertama buat class SearchableActivity dan masukan kode berikut:
package com.giviews.employee;

import
android.app.ListActivity;
import
android.app.SearchManager;
import
android.content.Intent;
import
android.database.Cursor;
import
android.net.Uri;
import
android.os.Bundle;
import
android.support.annotation.Nullable;
import
android.support.v7.widget.SearchView;
import
android.view.Menu;
import
android.view.MenuItem;
import
android.view.View;
import
android.widget.ListAdapter;
import
android.widget.ListView;
import
android.widget.SimpleCursorAdapter;
import
android.widget.Toast;

import
com.giviews.employee.data.EmployeeContract;

import
java.util.Timer;
import
java.util.TimerTask;

/**
 * Created by asus on 29/10/2017.
 */

public class SearchableActivity extends ListActivity implements SearchView.OnQueryTextListener{

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);

       
Intent intent = getIntent();
       
checkIntent(intent);
   
}

   
@Override
   
protected void onNewIntent(Intent newIntent) {
        setIntent(newIntent)
;

       
checkIntent(newIntent);
   
}

   
private void checkIntent(Intent intent) {
        String query =
"";
       
String intentAction = intent.getAction();
        if
(Intent.ACTION_SEARCH.equals(intentAction)) {
            query = intent.getStringExtra(SearchManager.
QUERY);
       
} else if (Intent.ACTION_VIEW.equals(intentAction)) {
            Uri details = intent.getData()
;
           
Intent detailsIntent = new Intent(Intent.ACTION_VIEW, details);
           
startActivity(detailsIntent);
       
}
        fillList(query)
;
   
}

   
private void fillList(String query) {
        String wildcardQuery =
"%" + query + "%";

       
Cursor cursor = getContentResolver().query(
                EmployeeContract.EmployeeEntry.
CONTENT_URI,
                null,
               
EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME + " LIKE ? OR " + EmployeeContract.EmployeeEntry.COLUMN_LASTNAME + " LIKE ? OR ",
                new
String[]{ wildcardQuery, wildcardQuery },
                null
);

        if
(cursor.getCount() == 0) {
            Toast.makeText(
this, " NO SEARCH RESULT ", Toast.LENGTH_SHORT).show();
            int
timeout = 3000;

           
Timer timer = new Timer();
           
timer.schedule(new TimerTask() {
                
@Override
               
public void run() {
                    finish()
;
                   
Intent intent = new Intent(SearchableActivity.this, EmployeeActivity.class);
                   
startActivity(intent);
               
}
            }
, timeout);

       
}

        ListAdapter adapter =
new SimpleCursorAdapter(
               
this,
               
android.R.layout.simple_list_item_2,
               
cursor,
                new
String[]{ EmployeeContract.EmployeeEntry.COLUMN_FIRSTNAME, EmployeeContract.EmployeeEntry.COLUMN_LASTNAME },
                new int
[]{android.R.id.text1, android.R.id.text2},
               
0);
       
setListAdapter(adapter);
   
}

   
@Override
   
protected void onListItemClick(ListView l, View view, int position, long id) {
        Intent intent =
new Intent(SearchableActivity.this, EmployeeActivity.class);

       
Uri details = Uri.withAppendedPath(EmployeeContract.EmployeeEntry.CONTENT_URI, "" + id);
       
intent.setData(details);
       
startActivity(intent);
   
}

   
@Override
   
public boolean onOptionsItemSelected(MenuItem item) {
       
if (item.getItemId() == android.R.id.home) {

            Intent parentActivityIntent =
new Intent(this, EmployeeActivity.class);
           
parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
           
startActivity(parentActivityIntent);
           
finish();
            return true;
       
}
       
return super.onOptionsItemSelected(item);
   
}

   
@Override
    
public boolean onQueryTextSubmit(String query) {
       
return false;
   
}

   
@Override
   
public boolean onQueryTextChange(String newText) {
       
return false;
   
}
}

kemudian buat class SettingsActivity untuk menggati warna thema aplikasi kita, dengan kode seperti berikut:
package com.giviews.employee;



import android.annotation.TargetApi;

import android.content.Intent;

import android.content.SharedPreferences;

import android.graphics.Paint;

import android.graphics.drawable.ShapeDrawable;

import android.graphics.drawable.shapes.OvalShape;

import android.os.Build;

import android.preference.PreferenceManager;

import android.support.annotation.RequiresApi;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.support.v7.widget.Toolbar;

import android.view.View;

import android.widget.Button;





import com.turkialkhateeb.materialcolorpicker.ColorChooserDialog;

import com.turkialkhateeb.materialcolorpicker.ColorListener;



public class SettingsActivity extends AppCompatActivity {



    SharedPreferences sharedPreferences, app_preperences;

    SharedPreferences.Editor editor;

    Button button;

    Methods methods;



    int appTheme;

    int themeColor;

    int appColor;

    Constant constant;



    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);



        app_preperences = PreferenceManager.getDefaultSharedPreferences(this);

        appColor = app_preperences.getInt("color", 0);

        appTheme = app_preperences.getInt("theme", 0);

        themeColor = appColor;

        constant.color = appColor;



        if (themeColor == 0) {

            setTheme(Constant.theme);

        } else if (appTheme == 0) {

            setTheme(Constant.theme);

        } else {

            setTheme(appTheme);

        }

        setContentView(R.layout.activity_settings);



        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_setting);

        toolbar.setTitle("Settings");

        toolbar.setBackgroundColor(Constant.color);



        methods = new Methods();



        button = (Button) findViewById(R.id.button_color);



        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);



        editor = sharedPreferences.edit();



        colorize();



        button.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                ColorChooserDialog dialog = new ColorChooserDialog(SettingsActivity.this);

                dialog.setTitle("Select");

                dialog.setColorListener(new ColorListener() {

                    @Override

                    public void OnColorClick(View v, int color) {

                        colorize();

                        Constant.color = color;



                        methods.setColorTheme();

                        editor.putInt("color", color);

                        editor.putInt("theme", Constant.theme);

                        editor.commit();



                        Intent intent = new Intent(getApplicationContext(), EmployeeActivity.class);

                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                        startActivity(intent);

                    }

                });



                dialog.show();

            }



        });

    }



    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)

    private void colorize(){

        ShapeDrawable d = new ShapeDrawable(new OvalShape());

        d.setBounds(58, 58, 58, 58);



        d.getPaint().setStyle(Paint.Style.FILL);

        d.getPaint().setColor(Constant.color);



        button.setBackground(d);

    }



}

kemudian kita buat class Constant untuk mengganti warna thema aplikasi kita:
package com.giviews.employee;



import java.io.Serializable;



/**

 * Created by asus on 05/11/2017.

 */



public class Constant implements Serializable {



    public static int nav_clicked = 0;

    public static Boolean isNavClicked = false;



    public static Boolean isToggle = true;

    public static  int color = 0xfff67f21;

    public static  int theme = R.style.AppTheme;

}

selanjutnya buat class Methods untuk mengubah warna theme, dengan kode seperti berikut:
package com.giviews.employee;



/**

 * Created by asus on 05/11/2017.

 */



public class Methods {



    public void setColorTheme() {



        switch (Constant.color){

            case 0xffF44336:

                Constant.theme = R.style.AppTheme_red;

                break;

            case 0xffE91E63:

                Constant.theme = R.style.AppTheme_pink;

                break;

            case 0xff9C27B0:

                Constant.theme = R.style.AppTheme_darpink;

                break;

            case 0xff673AB7:

                Constant.theme = R.style.AppTheme_violet;

                break;

            case 0xff3F51B5:

                Constant.theme = R.style.AppTheme_blue;

                break;

            case 0xff03A9F4:

                Constant.theme = R.style.AppTheme_skyblue;

                break;

            case 0xff4CAF50:

                Constant.theme = R.style.AppTheme_green;

                break;

            case 0xffFF9800:

                Constant.theme = R.style.AppTheme;

                break;

            case 0xff9E9E9E:

                Constant.theme = R.style.AppTheme_grey;

                break;

            case 0xff795548:

                Constant.theme = R.style.AppTheme_brown;

                break;

            default:

                    Constant.theme = R.style.AppTheme;

        }

    }

}

Terakhir sesuaikan AndroidManifest anda seperti berikut:
<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.giviews.employee">



    <uses-feature android:name="android.hardware.camera2"/>

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>



    <application

        android:allowBackup="true"

        android:icon="@mipmap/ic_launcher"

        android:label="@string/app_name"

        android:roundIcon="@mipmap/ic_launcher_round"

        android:supportsRtl="true"

        android:theme="@style/AppTheme">

        <activity android:name=".EmployeeActivity">

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />



                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <activity

            android:name=".EmployeeEditor"

            android:parentActivityName=".EmployeeActivity">

            <meta-data

                android:name="android.support.PARENT_ACTIVITY"

                android:value=".EmployeeActivity" />

        </activity>



        <!-- Employee Details -->

        <activity

            android:name=".EmployeeDetailsActivity"

            android:parentActivityName=".EmployeeActivity">

            <meta-data

                android:name="android.support.PARENT_ACTIVITY"

                android:value=".EmployeeActivity" />

        </activity>



        <provider

            android:name=".data.EmployeeProvider"

            android:authorities="com.giviews.employee"

            android:exported="false" />



        <!-- searchable -->

        <activity

            android:name=".SearchableActivity"

            android:launchMode="singleTop">

            <intent-filter>

                <action android:name="android.intent.action.SEARCH" />

            </intent-filter>

            <intent-filter>

                <action android:name="android.intent.action.VIEW" />

            </intent-filter>



            <meta-data

                android:name="android.app.searchable"

                android:resource="@xml/searchable" />

        </activity>



        <meta-data

            android:name="android.app.default_searchable"

            android:value="com.giview.employee.SearchableActivity" />



        <activity android:name=".SettingsActivity"></activity>

    </application>



</manifest>


Sekarang jalankan aplikasi anda, jika ada yang kurang jelas silakan ditanyakan pada komentar dibawah. jika anda ingin melihat sourcode versi full silakan download disini. jika artikel ini bermanfaat silakan di share, selamat mencoba semoga bermanfaat kdepanya kita akan membuat CRUD SQLite dengan model dan adapter, CRUD dengan database firebase, dan CRUD dengan MySQL database