这篇文章主要介绍了基于laravel制作APP接口(API)的相关资料,需要的朋友可以参考下
前期准备
前言,为什么做以及要做个啥
本人姓小名白,不折不扣编程届小白一名,但是自从大一那会儿接触到编程这件奇妙的事情,就完完全全的陷入的程序的世界。
这不,最近又开始折腾APP了,话说现在开发一款APP真是容易,只用JavaScript和一点点HTML+css技术就可以完成。但是做APP的后台就不一样了。开发了APP,想让读点数据进去,那我们就要去开发个后台了。
laravel框架,是我最喜欢的PHP框架了,没有之一。去年就曾经用laravel写了我的个人网站但粗糙程度让我十分脸红,好了不扯了,让我们直接进入主题——先安装laravel吧!
基础环境配置
具体的步骤直接看文档吧laravel5.2安装
我自己的环境是win10上面安装了wampsrver2.5,但是这里值得好好注意一下,用wampsrver2.5了话,这几个地方要改动一下。关于这个请看我的笔记点击预览
工具:sublime
浏览器:chrome(要用到的插件postman)
关于API
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
需要注意的是:API有它的具体用途,我们应该清楚它是干啥的。访问API的时候应该输入什么。访问过API过后应该得到什么。
在开始设计API时,我们应该注意这8点
这里的内容摘抄自大神的博客
后续的开发计划就围绕着这个进行了。(真心好棒的总结)
1.Restful设计原则
2.API的命名
3.API的安全性
4.API返回数据
5.图片的处理
6.返回的提示信息
7.在线API测试文档
8.在app启动时,调用一个初始化API获取必要的信息
用laravel开发API
就在我上愁着要不要从零开始学习的时候,找到了这个插件dingo/api那么现在就来安装吧!
首先一定是下载的没错
在新安装好的laravel的composer.json加入如下内容
然后打开cmd执行
1
|
composer update |
在config/app.php中的providers里添加
1
2
3
4
|
App\Providers\OAuthServiceProvider:: class ,
Dingo\Api\Provider\LaravelServiceProvider:: class ,
LucaDegasperi\OAuth2Server\Storage\FluentStorageServiceProvider:: class ,
LucaDegasperi\OAuth2Server\OAuth2ServerServiceProvider:: class ,
|
在aliases里添加
1
|
'Authorizer' => LucaDegasperi\OAuth2Server\Facades\Authorizer:: class ,
|
修改app/Http/Kernel.php文件里的内容
1
2
3
4
5
6
7
8
9
|
protected $middleware = [\LucaDegasperi\OAuth2Server\Middleware\OAuthExceptionHandlerMiddleware:: class ,
]; protected $routeMiddleware = [
'oauth' => \LucaDegasperi\OAuth2Server\Middleware\OAuthMiddleware:: class ,
'oauth-user' => \LucaDegasperi\OAuth2Server\Middleware\OAuthUserOwnerMiddleware:: class ,
'oauth-client' => \LucaDegasperi\OAuth2Server\Middleware\OAuthClientOwnerMiddleware:: class ,
'check-authorization-params' => \LucaDegasperi\OAuth2Server\Middleware\CheckAuthCodeRequestMiddleware:: class ,
'csrf' => \App\Http\Middleware\VerifyCsrfToken:: class ,
]; |
然后执行
1
2
|
php artisan vendor:publish php artisan migrate |
在.env文件里添加这些配置
API_STANDARDS_TREE=x
API_SUBTYPE=rest
API_NAME=REST
API_PREFIX=api
API_VERSION=v1
API_CONDITIONAL_REQUEST=true
API_STRICT=false
API_DEBUG=true
API_DEFAULT_FORMAT=json
修改app\config\oauth2.php文件
1
2
3
4
5
6
7
|
'grant_types' => [
'password' => [
'class' => 'League\OAuth2\Server\Grant\PasswordGrant' ,
'access_token_ttl' => 604800,
'callback' => '\App\Http\Controllers\Auth\PasswordGrantVerifier@verify' ,
],
], |
新建一个服务提供者,在app/Providers下新建OAuthServiceProvider.php文件内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
namespace App\Providers;
use Dingo\Api\Auth\Auth;
use Dingo\Api\Auth\Provider\OAuth2;
use Illuminate\Support\ServiceProvider;
class OAuthServiceProvider extends ServiceProvider
{ public function boot()
{
$this ->app[Auth:: class ]->extend( 'oauth' , function ( $app ) {
$provider = new OAuth2( $app [ 'oauth2-server.authorizer' ]->getChecker());
$provider ->setUserResolver( function ( $id ) {
// Logic to return a user by their ID.
});
$provider ->setClientResolver( function ( $id ) {
// Logic to return a client by their ID.
});
return $provider ;
});
}
public function register()
{
//
}
} |
然后打开routes.php添加相关路由
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//Get access_token Route::post( 'oauth/access_token' , function () {
return Response::json(Authorizer::issueAccessToken());
}); //Create a test user, you don't need this if you already have. Route::get( '/register' , function (){
$user = new App\User();
$user ->name= "tester" ;
$user ->email= "test@test.com" ;
$user ->password = \Illuminate\Support\Facades\Hash::make( "password" );
$user ->save();
}); $api = app( 'Dingo\Api\Routing\Router' );
//Show user info via restful service. $api ->version( 'v1' , [ 'namespace' => 'App\Http\Controllers' ], function ( $api ) {
$api ->get( 'users' , 'UsersController@index' );
$api ->get( 'users/{id}' , 'UsersController@show' );
}); //Just a test with auth check. $api ->version( 'v1' , [ 'middleware' => 'api.auth' ] , function ( $api ) {
$api ->get( 'time' , function () {
return [ 'now' => microtime(), 'date' => date ( 'Y-M-D' ,time())];
});
}); |
分别创建BaseController.php和UsersController.php内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
//BaseController namespace App\Http\Controllers;
use Dingo\Api\Routing\Helpers;
use Illuminate\Routing\Controller;
class BaseController extends Controller
{ use Helpers;
} //UsersController namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class UsersController extends BaseController
{ public function index()
{
return User::all();
}
public function show( $id )
{
$user = User::findOrFail( $id );
// 数组形式
return $this ->response-> array ( $user ->toArray());
}
} |
随后在app/Http/Controllers/Auth/下创建PasswordGrantVerifier.php内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
namespace App\Http\Controllers\Auth;
use Illuminate\Support\Facades\Auth;
class PasswordGrantVerifier
{ public function verify( $username , $password )
{
$credentials = [
'email' => $username ,
'password' => $password ,
];
if (Auth::once( $credentials )) {
return Auth::user()->id;
}
return false;
}
} |
打开数据库的oauth_client表新增一条client数据
1
|
INSERT INTO 'oauth_clients' ( 'id' , 'secret' , 'name' , 'created_at' , 'updated_at' ) VALUES ( '1' , '2' , 'Main website' , '2016–03–13 23:00:00' , '0000–00–00 00:00:00' );
|
随后的就是去愉快的测试了,这里要测试的API有
新增一个用户
读取所有用户信息
只返回用户id为4的信息
获取access_token
http://localhost/oauth/access_token
利用token值获得时间,token值正确才能返回正确值
打开PostMan
【转】基于laravel制作APP接口(API)的更多相关文章
-
基于腾讯云监控 API 的 Grafana App 插件开发
Tencent Cloud Monitor App Grafana 是一个开源的时序性统计和监控平台,支持例如 elasticsearch.graphite.influxdb 等众多的数据源,并以功能 ...
-
【转】App开放接口api安全性—Token签名sign的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
-
App开放接口api安全性的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证, 那么这就需要用户提供一些信息,比如用户名密码等 ...
-
App开放接口api安全性—Token签名sign的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
-
App开放接口API安全性 — Token签名sign的设计与实现
在app开放接口API的设计中,避免不了的就是安全性问题. 一.https协议 对于一些敏感的API接口,需要使用https协议. https是在http超文本传输协议加入SSL层,它在网络间通信是加 ...
-
APP开放接口API安全性——Token令牌Sign签名的设计与实现
在APP开放接口API的设计中,避免不了的就是安全性问题. 一.https协议 对于一些敏感的API接口,需要使用https协议.https是在http超文本传输协议加入SSL层,它在网络间通信是加密 ...
-
App开放接口API安全性之Token签名Sign的设计与实现
前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...
-
Hybrid App技术批量制作APP应用与跨平台解决方案
前言 简单的聊一聊我开发了4年之久的Hybrid App(混合模式移动应用)平台开发,目前一直在持续开发与维护,支持无编程快速开发! 其本意也不是要吹捧前端有多么强大,只是用自己的实际项目阐述下对于前 ...
-
【社交系统ThinkSNS+研发日记三】基于 Laravel Route 的 ThinkSNS+ Component
[社交系统ThinkSNS+研发日记系列] 一.<ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1> 二.<基于 Laravel 开发 Th ...
随机推荐
-
【原创】机器学习之PageRank算法应用与C#实现(2)球队排名应用与C#代码
在上一篇文章:机器学习之PageRank算法应用与C#实现(1)算法介绍 中,对PageRank算法的原理和过程进行了详细的介绍,并通过一个很简单的例子对过程进行了讲解.从上一篇文章可以很快的了解Pa ...
-
PSP个人软件开发工具需求分析文档
第一部分:前景与范围 1.业务需求 1.1 背景 在目前的软件项目开发过程中,进度计划总是非常不准确,经常出现延期,而且大多数都无法给出一个相对比较准确的延迟时间.即使使用用例包.用例的方式组织需求, ...
-
xshell连接本地Linux虚拟机!
终端输入ifconfig获取本地虚拟机的IP地址; 安装openssh-server sudo apt-get install openssh-server 查看server是否启动: ps -ef ...
-
eclipse 启动tomcat报Spring错误 Error creating bean with name &#39;serviceOrderBiz&#39;: Injection of autowired dependencies failed
启动tomcat报异常,提示Sring无法创建serviceOrderBiz(第一行红字),继续看是因为有一个自动注入的字段无法注入ModuleInterfaceBiz(第二行红字),检查servic ...
-
干净的架构The Clean Architecture
干净的架构The Clean Architecture 这是著名软件大师Bob大叔提出的一种架构,也是当前各种语言开发架构.干净架构提出了一种单向依赖关系,从而从逻辑上形成一种向上的抽象系统. 我们经 ...
-
内存/硬盘/io关系
CPU:工人,干活的,判断以及逻辑处理 硬盘:仓库,原料,数据存储 内存:车间,工人干活的地方,车间中加工原料,当车间中没有原料了,在从仓库中取原料,对原料进行加工 内存本身有一定的存储空间,对内存 ...
-
A. Karen and Morning
A. Karen and Morning time limit per test 2 seconds memory limit per test 512 megabytes input standa ...
-
浅谈tcp粘包问题
第一部分:简介tcp socket通信的底层原理 原理解析图: socket通信过程如图所示:首先客户端将发送内容通过send()方法将内容发送到客户端计算机的内核区,然后由操作系统将内容通过底层路径 ...
-
ZY
2017*****1022:我是石翟夫:我的爱好是计算机: 我的码云个人主页是:https://gitee.com/S_DiF/events 我的第一个项目地址是:https://gitee.com/ ...
-
HTML5 &; how to download SVG in js
HTML5 & how to download SVG in js how to download SVG in js http://dinbror.dk/blog/how-to-downlo ...