Laravel框架内实现api文档:markdown转为html (2)

以上是我从网上随便粘贴的一段,虽说本人写代码不是非常洁癖,但这么一大串的注释,本人看着就表示不爽,所以没一点深入了解它的欲望。不介意的就自行研究喽。

 

优点:同后端代码一起,更新维护距离近在咫尺。

缺点:注释太大块了,感觉影响看功能,代码显得十分拖沓,影响美观。

 

  5.框架内直接编辑markdown文件

这就是我目前最喜欢的方式,也是本文要讲解实现的方式。

 

优点:同后端代码一起,维护方便;markdown格式编写,文档撰写省时;所有接口在一个页面或几个划分好的页面里,方便浏览和查找。

缺点:要做一些前期工作来实现。但现在有了现成的插件和本文的教程支持,缺点就可以忽略不计了。

 

 

以上几种方式都比较完了,现在我就来实现在Laravel内撰写Api文档,支持网页浏览。

 

要实现的功能主要就是把指定的md文件转换成html。

github上有一个人气很旺的插件:erusev/parsedown, 地址:php解析markdown为html的插件:erusev/parsedown

 

一般项目涉及PC后台,我这里就新增一个路由文件专门来放这些后台的api。

 

1.安装erusev/parsedown插件。

编辑composer.json文件,添加代码如下:

"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.7.*",
"laravel/tinker": "^1.0",
"erusev/parsedown":"^1.6" //新增的
},

 

项目根目录下执行composer install进行安装。在vendor文件夹下可看到erusev文件夹,则代表安装成功。

  2.在app/Providers/RouteServiceProvider.php中引入自定义的后台路由文件。 public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
//新增的后台路由
$this->mapAdminRoutes();
}

protected function mapAdminRoutes()
{
Route::prefix('admin')
// ->middleware('api') //避免篇幅过长,中间件的引入这里就忽略了
->namespace($this->namespace)
->group(base_path('routes/admin.php'));
}     3.添加路由,添加控制器,先调试,要可以成功进入控制器方法。

routes问价下新增admin.php文件,里面加上我们的api文档路由:

Route::get('/apidoc', 'Admin\ApiDocController@showDoc'); //注意后面是反斜杠\,否则会报错

laravel框架入口是public/index.php,为了隐藏这个就自定义个本地解析的名称,编辑apache的httpd-vhosts文件如下:

<VirtualHost *:80>
ServerName testlaravel
DocumentRoot E:/wamp64/www/laravel/public
<Directory "E:/wamp64/www/laravel/public/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
Allow from all
Header set Access-Control-Allow-Origin *
</Directory>
RewriteEngine On
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
</VirtualHost>

编辑好后,重启apache服务。

 

现在来加控制器,laravel可以用artisan命令生成,方便快捷。在项目根目录执行如下命令:

php artisan make:controller Admin/ApiDocController

接下来编辑controller文件:

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class ApiDocController extends Controller
{
public function showDoc(Request $request){
echo "hello coder";
}
}

浏览器输入,直到出现hello coder后才可以进行后面步骤。

  4. 使用插件实现markdown转为html

功能很简单,就直接上代码啦。

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Parsedown;

class ApiDocController extends Controller
{
public function __construct(){
$this->markdownParser = new Parsedown();
}

public function showDoc(Request $request){
$fileContent = file_get_contents(storage_path('doc/admin_api.md'));
$htmlContent = $this->convertMarkdownToHtml($fileContent);
$content = $this->convertMarkdownToHtml($htmlContent);
return view('apidoc_admin')->with('content',$content);
}

public function convertMarkdownToHtml($markdown)
{
$convertedHmtl = $this->markdownParser->setBreaksEnabled(true)->text($markdown);
return $convertedHmtl;
}
}

本文推荐的就是用markdown编辑api的方式,md就是markdown文件的后缀,我现在把这个文件放在storage/doc/admin_api.md处。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywpgj.html