API 系列教程(一):基于 Laravel 5.5 构建 和 测试 RESTful API

本教程详细介绍了如何使用 Laravel 5.5 构建和测试 RESTful API,包括理解 RESTful 架构、HTTP 动词的应用、资源管理、路由和控制器的创建、API 认证流程(如注册、登录和退出)、以及测试接口的方法。教程通过实例展示了如何创建 Laravel 项目,设置数据库和模型,以及如何编写和运行测试用例,确保 API 的正确性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着移动开发和 JavaScript 框架的日益流行,使用 RESTful API 在数据层和客户端之间构建交互接口逐渐成为最佳选择。

在本系列教程中,将会带领大家基于 Laravel 5.5 来构建并测试带认证功能的 RESTful API。

RESTful API

先要了解什么是 RESTful API。REST 是 Representational State Transfer 的缩写,表示一种应用之间网络通信的架构风格,依赖于无状态的协议(通常是HTTP)进行交互。

通过 HTTP 动词表示操作

在 RESTful API 中,我们使用 HTTP 动词表示操作,而端点是操作的资源,HTTP 动词的语义如下:

  • GET:获取资源
  • POST:创建资源
  • PUT:更新资源
  • DELETE:删除资源

更新操作:PUT vs POST

关于 RESTful API 有一些争议,比如更新资源使用 POST、PATCH 还是 PUT 哪一个更好?

在本教程中,我们使用 PUT 进行更新操作,因为基于 HTTP RFC 标准,PUT 的含义是在指定位置上创建/更新资源;使用 PUT 的另一个原因是幂等性,这意味着不管你发送一次、两次还是上千次请求,操作结果都一致。

资源

在 RESTful API 中,资源指的是操作的对象,在我们的例子中就是文章(Articles)和用户(Users)。

它们各自的端点是:

  • /articles
  • /users

在我们的教程中,资源和数据模型一一对应,但这并不是强制性的要求。

关于一致性的注意项

使用 REST 的最大好处是更容易消费和开发 API,一些端点非常直截了当,这样相较于类似 GET /get_article?id_article=12 这样的端点 RESTful API 更容易使用和维护。

不过,在某些案例中映射到 Create/Retrieve/Update/Delete 可能会很困难。

需要牢记的是: URL 中不要包含任何动词而且资源并不一定非得是数据表的某一行数据。另一个需要记住的是不必为每个资源实现所有操作。

构建一个新的 Laravel 项目

创建新应用

首先,通过 Composer 来安装 Laravel 5.5。

composer create-project --prefer-dist laravel/laravel apidemo 5.5.*

然后,自行配置 web 服务器,并修改 hosts 文件。

127.0.0.1 apidemo.test

检测是否可以正常访问 http://apidemo.test 。

修改 config/app.php 中的时区 timezone 配置:

'timezone' => 'Asia/Shanghai',

创建迁移和模型

在编写第一个迁移之前,需要将 .env 文件中的环境变量调整为开发环境中的数据库配置。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=apidemo
DB_USERNAME=root
DB_PASSWORD=root

接下来,就可以开始创建我们的第一个 Article 模型及其对应的迁移文件。

在项目根目录,运行如下 Artisan 命令一步到位:

php artisan make:model Article -m

-m 是 --migration 的缩写,告知 Artisan 在创建模型的同时创建与之对应的迁移文件。

上述命令创建的模型文件是 app/Article.php,迁移文件是 database/migrations/2018_04_03_160023_create_articles_table.php。

当然,还需要编辑该迁移文件的内容:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticlesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title', 100);
            $table->text('body');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('articles');
    }
}

然后,运行命令 php artisan migrate ,就会根据迁移文件来创建对应的数据表结构了。

php artisan migrate

执行成功后,就可以看到 apidemo 数据库中自动生成了 4 张表,articles、migrations、password_resets 和 users。

当然,只有 articles 表是由我们手动生成的迁移文件来生成的。

由上述迁移文件生成的 articles 表的结构为:

CREATE TABLE `articles` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `body` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

修改模型

修改 Article 模型类,添加如下属性字段到 $fillable ,以便可以在 Article::create 和 Article::update 方法中使用它们。

class Article extends Model
{
    protected $fillable = ['title', 'body'];
}

数据库填充

Laravel 通过 Faker 库可以快速为我们生成格式正确的测试数据。

创建填充器类:

php artisan make:seeder ArticlesTableSeeder

填充器类默认会存放在 database/seeds 目录下。

编辑 database/seeds/ArticlesTableSeeder.php 填充器:

<?php

use Illuminate\Database\Seeder;
use App\Article;

class ArticlesTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // Let's truncate our existing records to start from scratch.
        Article::truncate();

        $faker = \Faker\Factory::create();

        // And now, let's create a few articles in our database:
        for ($i = 0; $i < 50; $i++) {
            Article::create([
                'title' => $faker->sentence,
                'body' => $faker->paragraph,
            ]);
        }
    }
}

然后运行填充命令:

php artisan db:seed --class=ArticlesTableSeeder

类似地,再创建用户表填充器类:

php artisan make:seeder UsersTableSeeder

修改 database/seeds/UsersTableSeeder.php 文件:

<?php

use Illuminate\Database\Seeder;
use App\User;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // Let's clear the users table first
        User::truncate();

        $faker = \Faker\Factory::create();

        // Let's make sure everyone has the same password and
        // let's hash it before the loop, or else our seeder
        // will be too slow.
        $password = Hash::make('toptal');

        User::create([
            'name' => 'Administrator',
            'email' => 'admin@test.com',
            'password' => $password,
        ]);

        // And now let's generate a few dozen users for our app:
        for ($i = 0; $i < 10; $i++) {
            User::create([
                'name' => $faker->name,
                'email' => $faker->email,
                'password' => $password,
            ]);
        }
    }
}

然后,修改 database/seeds/DatabaseSeeder.php 文件:

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UsersTableSeeder::class);
        $this->call(Artic
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值