Application programming interface is a way for share data between two technology or two projects.
- create a new Laravel application
composer create-project laravel/laravel api_tutorial- Install api package
php artisan install:api- make router for api navigate to routes/api.php and add these following lines
Route::get("/test",function(){
return [
"name"=>"Tameem Ahamed",
"age"=>"23"
];
});- test api route then in browser navigate to localhost:port/api/test to see if it works.
-
Database config in .env file
-
Make controller and model
php artisan make:controller UserControllernavigate to app/Http/Controllers/UserController and add these followings:
function list(){
return "list function called";
}in routes/api.php:
use App\Http\Controllers\UserController;
Route::get('users',[UserController::class, 'list']);now make a model. run the following in terminal:
php artisan make:model users- Get data from the Database in UserController.php :
use App\Models\users;
class UserController extends Controller
{
function list(){
return users::all();
}
}-
Test API
-
Type of API method
- Get
- Post
- Put/Patch
- Delete
- Why need to test APIs
- Install Thunder Client Extension search for Thunder Client extension in vs code. Install and get into it.
- Understand the basic of Thunder Client
- Test Get API
- Test Post API
- make function and Route navigate to UserController.php then add the following
function addUser(){
return "addUser method called";
}navigate to api.php
Route::post('adduser',[UserController::class, 'addUser']);- Write code for API
{
"name":"Tameem Ahamed",
"username":"tameem69",
"email":"tameemahamedc@gmail.com",
"role":"user",
"password":"thereititis",
"status":"inactive",
"phone":"123456"
}- Test POST API
- Test Database table data navigate to UserController.php then modify the following
use Illuminate\Support\Facades\Hash;
function addUser(Request $request){
$user = new users();
$user->name = $request->name;
$user->username = $request->username;
$user->email = $request->email;
$user->role = $request->role;
$user->password = Hash::make($request->password);
$user->status = $request->status;
$user->phone = $request->phone;
if($user->save()){
return $user;
}
else{
return "failed";
}
}- Make function and Route in UserController.php add these
function updateUser(Request $request){
$user = users::find($request->id);
$user->status = $request->status;
$user->phone = $request->phone;
$user->email = $request->email;
if($user->save()){
return "Updated";
}
else{
return "failed";
}
}in api.php add that
Route::put('updateuser',[UserController::class,'updateUser']);- Write code for API
{
"id":"12",
"email":"ahamedctameem@gmail.com",
"status":"active",
"phone":"123456"
}- Test Put API
- Test database table data
- Make function and Route in UserController.php add
function deleteUser($user){
$user = users::destroy($id);
if($id){
return "deleted";
}
else {
return "not deleted";
}
}in api.php
Route::delete('deleteuser', [UserController::class, 'deleteUser']);- Write code for Delete API
- Test API call for localhost:8000/api/deleteuser/12
- Test Database table data
- Make function and define route
function searchUser($name){
$user = users::where('name', 'like', "%$name%")->get();
if(!empty($user)){
return $user;
}
else return "no record found";
}
Route::get('searchuser/{name}', [UserController::class, 'searchUser']);- Write code for search data API
- Test API
- Verify result with database table data
- Import Validation class in UserController.php
use Illuminate\Support\Facades\Validator;
function addUser(Request $request){
$rules = array(
'name'=>'required | min:2 | max:10',
'email'=>'required | email',
);
$validation = Validator::make($request->all(), $rules);
if($validation->fails()){
return $validation->errors();
}
$user = new users();
$user->name = $request->name;
$user->username = $request->username;
$user->email = $request->email;
$user->role = $request->role;
$user->password = Hash::make($request->password);
$user->status = $request->status;
$user->phone = $request->phone;
if($user->save()){
return $user;
}
else{
return "failed";
}
}- Apply Validation for add student API
- Test API
- Verify the result with databse table data
- What is Resource Controllers?
- Make Controller with Resource
php artisan make:controller MemberController --resourceit(--resource) would automatically create some functions in the controllers
- Write Routes in api.php
use App\Http\Controllers\MemberController;
Route::resource('member',MemberController::class);- Test APIs
- what is sanctum?
-
- sanctum is a package for token generation.
- Install laravel API
- Migrate tables
php artisan migrate- Make Controller
php artisan make:controller UserAuthController- Update User Model navigate to app/models/User.php
use Laravel\Sanctum\HasApiTokens;
use HasFactory, Notifiable, HasApiTokens;- Define Route in api.php
Route::post('signup',[UserAuthController::class, 'signUp']);
Route::post('login',[UserAuthController::class, 'login']);- Write code for Signup in UserAuthController.php
use App\Models\User;
function signUp(Request $request){
$input = $request->all();
$input["password"] = bcrypt($input["password"]);
$user = User::create($input);
$success['token'] = $user->createToken('MyApp')->plainTextToken;
$user['name'] = $user->name;
return [
"success"=>true,
"result"=>$success
];
}- Test APIs and Check token
- Make Login function and Route for Login API
function login(Request $request){
// return "Login called";
// return $request->all();
$user = User::where('email', $request->email)->first();
if(!$user || !Hash::check($request->password, $user->password)){
return [
'result'=>'user not found',
'success'=>'false'
];
}
$success['token'] = $user->createToken('MyApp')->plainTextToken;
$user['name'] = $user->name;
return [
"success"=>true,
"result"=>$success
];
}- Write code for Login API
- Test APIs and check token
- Apply sanctum middleware to routes
- Send Token with API
- Test Apis and check tokens