PHP高性能API开发实战:构建现代化RESTful服务

2025-08-03 0 511

PHP高性能API开发实战:构建现代化RESTful服务

一、现代PHP技术栈选型

高性能API开发核心组件:

  • Laravel 10:现代化PHP框架
  • Eloquent ORM:数据库操作
  • Passport:OAuth2认证
  • Redis:缓存与队列
  • OpenAPI:API文档生成

二、项目初始化与配置

1. 创建Laravel项目

composer create-project laravel/laravel api-server
cd api-server
composer require laravel/passport
composer require darkaonline/l5-swagger

2. 数据库配置

// .env 配置示例
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=api_demo
DB_USERNAME=root
DB_PASSWORD=

CACHE_DRIVER=redis
QUEUE_CONNECTION=redis

三、核心架构实现

1. 数据模型与迁移

// 创建用户模型迁移
php artisan make:model User -m

// database/migrations/xxxx_create_users_table.php
Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

// 产品模型
php artisan make:model Product -mcr

// app/Models/Product.php
class Product extends Model
{
    protected $fillable = ['name', 'description', 'price'];
    
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

2. API认证配置

// 安装Passport
php artisan passport:install

// config/auth.php
'guards' => [
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

// User模型添加HasApiTokens
use LaravelPassportHasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
}

四、业务逻辑开发

1. 认证控制器

// app/Http/Controllers/AuthController.php
class AuthController extends Controller
{
    public function register(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|unique:users',
            'password' => 'required|string|min:8|confirmed',
        ]);
        
        $user = User::create([
            'name' => $validated['name'],
            'email' => $validated['email'],
            'password' => Hash::make($validated['password']),
        ]);
        
        $token = $user->createToken('authToken')->accessToken;
        
        return response()->json([
            'user' => $user,
            'access_token' => $token,
        ], 201);
    }
    
    public function login(Request $request)
    {
        $credentials = $request->validate([
            'email' => 'required|email',
            'password' => 'required',
        ]);
        
        if (!Auth::attempt($credentials)) {
            return response()->json(['message' => 'Unauthorized'], 401);
        }
        
        $user = $request->user();
        $token = $user->createToken('authToken')->accessToken;
        
        return response()->json([
            'access_token' => $token,
            'token_type' => 'Bearer',
        ]);
    }
}

2. 产品API实现

// app/Http/Controllers/ProductController.php
class ProductController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth:api');
    }
    
    public function index()
    {
        return Product::with('user')
            ->orderBy('created_at', 'desc')
            ->paginate(10);
    }
    
    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
            'price' => 'required|numeric|min:0',
        ]);
        
        $product = $request->user()->products()->create($validated);
        
        return response()->json($product, 201);
    }
    
    public function show(Product $product)
    {
        return $product->load('user');
    }
    
    public function update(Request $request, Product $product)
    {
        $this->authorize('update', $product);
        
        $validated = $request->validate([
            'name' => 'sometimes|string|max:255',
            'description' => 'nullable|string',
            'price' => 'sometimes|numeric|min:0',
        ]);
        
        $product->update($validated);
        
        return response()->json($product);
    }
    
    public function destroy(Product $product)
    {
        $this->authorize('delete', $product);
        
        $product->delete();
        
        return response()->json(null, 204);
    }
}

五、API文档与测试

1. OpenAPI文档生成

// 配置Swagger注释
/**
 * @OAInfo(
 *     title="产品API文档",
 *     version="1.0.0",
 *     description="产品管理API文档"
 * )
 */

// 控制器方法注释示例
/**
 * @OAGet(
 *     path="/api/products",
 *     summary="获取产品列表",
 *     tags={"产品"},
 *     security={{"bearerAuth":{}}},
 *     @OAResponse(
 *         response=200,
 *         description="成功返回产品列表"
 *     )
 * )
 */

// 生成文档
php artisan l5-swagger:generate

2. 性能优化技巧

// 使用缓存
public function index()
{
    return Cache::remember('products.all', now()->addHour(), function () {
        return Product::with('user')
            ->orderBy('created_at', 'desc')
            ->paginate(10);
    });
}

// 使用队列处理耗时任务
ProcessProductImage::dispatch($product)->onQueue('images');

// 使用数据库索引优化查询
Schema::table('products', function (Blueprint $table) {
    $table->index('name');
    $table->index('price');
});
PHP高性能API开发实战:构建现代化RESTful服务
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

淘吗网 php PHP高性能API开发实战:构建现代化RESTful服务 https://www.taomawang.com/server/php/739.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务