thinkphp6 搭建后端 api 接口的详细教程与步骤

composer create-project topthink/think tp6

TP6框架下的默认控制器与行为配置既受欢迎又具争议。系统预设若未做任何输入,将直接导向index控制器,这一设定在《app.php》文件中有所详述。用户可依需调整该配置,但不应寄望其全能适配。

php think run

默认控制器与方法的设定

无论访问何控制器,若未指定具体方法,系统将自动调用index方法。若index方法不存在,系统将无情反馈“方法不存在”。此举虽简洁明了,实则常在开发过程中引发困扰。

隐藏入口文件的技巧

在这里插入图片描述

运用`phpthinkrun`启动的Web服务中,TP6自动实现了隐藏入口文件的功能,极尽便利。您可选择第三途径访问,无需忧虑入口文件的安全泄露问题。

在这里插入图片描述

本地开发中,通常需自行构建如WNMP等Web架构,期间需手动隐藏index.php等入口文件。虽然此过程增添工作量,为确保安全,这一略显繁琐的步骤实属必要。

在这里插入图片描述

跨域问题的处理

在这里插入图片描述

 #如果mode_rewrite.c模块存在 则执行以下命令
  Options +FollowSymlinks -Multiviews
  RewriteEngine On #开启 rewriteEngine
  # !-d 不是目录或目录不存在
  RewriteCond %{REQUEST_FILENAME} !-d 
  # !-f 不是文件或文件不存在
  RewriteCond %{REQUEST_FILENAME} !-f 
  RewriteRule ^(.*)$ index.php [QSA,PT,L]
  # 参数解释
  # ^(.*)$: 匹配所有的路口映射
  # QSA: (Query String Appending)表示保留参数入get传值?xxx==xx;
  # PT: 把这个URL交给Apache处理;
  # L: 作为最后一条,遇到这条将不再匹配这条之后的规则

跨域资源共享问题通常由服务器端处理。TP6内置特定中间件以解决此问题。仅需在应用的.php配置文件中添加该中间件,便可轻松支持跨域访问,极大简化了操作流程。

在这里插入图片描述

处理跨域问题时,顺利程度并非始终如一。即便部署了中间件,仍可能遭遇预料之外的挑战。在此情形下,耐心调试,精确定位问题成因是关键。

API版本控制的妙招

于TP6框架中,调整API版本设定系基于请求方指定的版本信息,系统据此调用相应方法。此机制虽具灵活性,却易在实际操作中引起混淆。

在这里插入图片描述

即便正确传递了版本信息,系统仍可能未能正确辨识。对此,我们需细致审查代码,探究问题根本。尽管这额外增添了工作负担,为确保系统稳定,此类努力至关重要。

Token验证的那些事儿


// +----------------------------------------------------------------------
use thinkfacadeRoute;
// api版本控制
$v = request()->header('Api-Version');
// 默认api版本为v1
if ($v == null) $v = "v1";
// 用户
Route::group('user', function () {
  Route::post('login', 'login');
})->prefix($v.'.user/')->pattern(['id' => 'd+']);

在TP6架构中,Token校验环节至关重要。一旦Token失效,系统将提示用户需重新登录。该插件虽顺利完成验证,但未进一步执行流程,仅回传了前期数据。

然而,官方文档中未详述注销或删除Token的流程,仅提供了刷新和拉黑两种操作。审查代码时,我发现刷新操作实际上调用了拉黑功能。这一注释让我颇为兴奋。

状态码的那些坑

composer require thans/tp-jwt-auth

于TP6架构,状态码主要归类为业务类和响应类。当前项目仅涉及响应类状态码。尽管响应数据中亦包含此类码,然实质作用有限,于小型、简易项目中鲜少使用业务类状态码。

偶尔即便发送了准确的响应状态码,系统仍未能准确辨认。

php think jwt:create

异常捕捉的那些事儿

在TP6环境中,异常处理通常实现自动化。然而,对于当前的参数验证异常,需手动捕获并引发。本节旨在实现对此类错误的统一捕获,以避免人工干预。

在这里插入图片描述

即便手动处理了异常,系统偶亦可能出现意料之外的错误。

接口文档的那些坑

 1,'name'=>'ceshi']);
      return $token;
    }
}

在TP6框架中,接口文档的编制至关重要。鉴于先前我们依赖在URL中嵌入API版本号来管理版本控制,故直接访问/user/login将导致无法访问控制器及对应方法。为此,需在路径前添加控制器所在路径标识v1,将/v1.user/login作为正确路径。

此方法通过控制器进行访问,明显不适宜。目标是无须在内部添加v1,这需深入探究,否则现有的路由定义将与接口文档相悖。

作者头像
tp钱包官网下载创始人

tp钱包官网下载

上一篇:Tomica!TP 全新题材震撼发布
下一篇:pyotp:无敌的 Python 库,你值得拥有