Create API (GP247)
This guide shows how to add new API endpoints in the GP247 ecosystem, including Front (customer) and Core (admin) APIs.
Conventions
- Front API prefix:
GP247_API_FRONT_PREFIX
- Core API prefix:
GP247_API_CORE_PREFIX
- Auth middlewares:
- Front (customer):
auth:customer-api
andability:
- Note: Available only when package
gp247/shop
is installed. - Default abilities:
config('gp247-config.api.auth.api_scope_user')
,config('gp247-config.api.auth.api_scope_user_guest')
.
- Note: Available only when package
- Core (admin):
auth:admin-api
andability:
- Default abilities:
config('gp247-config.api.auth.api_scope_admin')
,config('gp247-config.api.auth.api_scope_admin_supper')
.
- Default abilities:
- Front (customer):
You can register routes in routes/web.php
using the prefixes above. The packages will also auto-load their own routes; adding more with the same prefix is fine.
Public Front API (no auth)
use Illuminate\Support\Facades\Route;
Route::group([
'prefix' => GP247_API_FRONT_PREFIX,
], function () {
// Public endpoints under Front API prefix
// Example: GET /{FRONT_PREFIX}/banner/list
Route::get('banner/list', 'App\\GP247\\Front\\Api\\FrontController@getBannerList'); // Public list
// Example: GET /{FRONT_PREFIX}/page/detail/{id}
Route::get('page/detail/{id}', 'App\\GP247\\Front\\Api\\FrontController@getPageDetail'); // Public detail
});
Front Member API (requires gp247/shop)
use Illuminate\Support\Facades\Route;
$listAbility = [
config('gp247-config.api.auth.api_scope_user'),
config('gp247-config.api.auth.api_scope_user_guest'),
];
Route::group(['prefix' => GP247_API_FRONT_PREFIX], function () use ($listAbility) {
// Login issues an access token for the customer API guard
Route::post('login', 'App\\GP247\\Shop\\Api\\Front\\MemberAuthController@login'); // Customer login
Route::group([
'middleware' => [
'auth:customer-api', // Require customer API guard
'ability:'.implode(',', $listAbility), // Require token abilities
],
'prefix' => 'member',
], function () {
Route::get('order/list', 'App\\GP247\\Shop\\Api\\Front\\MemberAuthController@getOrderList'); // Secured list
Route::get('order/detail/{id}', 'App\\GP247\\Shop\\Api\\Front\\MemberAuthController@getOrderDetail'); // Secured detail
// Logout revokes the current token
Route::get('logout', 'App\\GP247\\Shop\\Api\\Front\\MemberAuthController@logout'); // Customer logout
});
});
Core Admin API
use Illuminate\Support\Facades\Route;
$listAbility = [
config('gp247-config.api.auth.api_scope_admin'),
config('gp247-config.api.auth.api_scope_admin_supper'),
];
Route::group([
'prefix' => GP247_API_CORE_PREFIX,
], function () use ($listAbility) {
// Admin login to obtain an access token
Route::post('login', 'App\\GP247\\Core\\Api\\Controllers\\AdminAuthController@login'); // Admin login
Route::group([
'middleware' => [
'auth:admin-api', // Require admin API guard
'ability:'.implode(',', $listAbility), // Require token abilities
],
], function () {
Route::get('logout', 'App\\GP247\\Core\\Api\\Controllers\\AdminAuthController@logout'); // Admin logout
Route::get('info', 'App\\GP247\\Core\\Api\\Controllers\\AdminController@getInfo'); // Admin profile/info
});
});
Notes
- Keep guard names and middleware in the exact case shown (they are case-sensitive).
- Make sure your token issuing logic assigns the required abilities so the
ability:
middleware passes. - If
gp247/shop
is not installed, customer endpoints requiringauth:customer-api
will not work.