使用Slim PHP Framework创建基于令牌的RESTful服务
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Slim PHP Framework创建基于令牌的RESTful服务,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7884字,纯文字阅读大概需要12分钟。
内容图文
以下是基于令牌的安全RESTful API的文章。根据您的站点ID和IP地址生成的加密令牌随请求调用一起发送; 然后,此令牌将用于进行身份验证,以在您的应用程序中使用RESTful服务。请按照以下演示进行参考。
?
?下载脚本 ?现场演示
本教程包含三个文件夹,名为restful, js和css, 带有PHP文件。
restful
- Slim // Slim Framework
---- db.php
---- index.php // api索引文件
---- .htaccess // url重定向文件。
js
- jquery.min.js
- ajaxGetPost.js
css
- style.css
index.php
数据库设计
要构建好友更新系统,您必须创建三个表,例如用户,朋友和更新。您可以查看我以前的朋友系统教程。
用户表
用户表包含所有用户注册详细信息。
CREATE TABLE` 用户 `(
` USER_ID `INT(11)AUTO_INCREMENT,
` 用户名 `VARCHAR(50),
` 密码 `VARCHAR(100),
` 名 `VARCHAR(100),
` profile_pic `VARCHAR(200),
PRIMARY KEY( `user_id`)
);
更新表
用户表包含用户状态更新详细信息。
CREATE TABLE` 更新 `(
` UPDATE_ID `INT(11)AUTO_INCREMENT,
` user_update `文字,
` user_id_fk `INT(11),
` 创建 `INT(11),
' 知识产权 'VARCHAR(50),
PRIMARY KEY(`update_id` )
);
使用Slim PHP Framework?
使用Java和MySQL?
db.php 创建RESTful服务在php.ini文件中
尝试启用php_pdo扩展之前,您必须修改数据库配置详细信息。
<?php
session_start();
$ _SESSION ['uid'] ='1';
$ session_uid = $ _SESSION ['uid'];
define(“ SITE_KEY ”,“yoursitekey”);
function getDB(){
$ dbhost =“ localhost ”;
$ dbuser =“ username ”;
$ dbpass =“密码 ”;
$ dbname =“ database ”;
$ dbConnection = new PDO(“ mysql:host = $ dbhost ; dbname = $ dbname”,$ dbuser,$ dbpass);
$ dbConnection-> setAttribute(PDO ::ERRMODE_EXCEPTION);
return $ dbConnection;
}
/ * API密钥加密* /
function apiKey($ session_uid)
{
$ key = md5(SITE_KEY。$ session_uid);
return hash(' sha256 ',$ key。$ _SERVER [' REMOTE_ADDR ']);
}
$ apiKey = apiKey($ session_uid);
?>
苗条的框架
api / index.php
Slim Framework可以帮助您简化API系统的实现。
<?php
需要 ' db.php ';
要求 ' Slim / Slim.php ';
\ Slim \ Slim :: registerAutoloader();
$ app = new \ Slim \ Slim();
$ APP->的get( '/为userDetails', 'getUserDetails');
$ APP->的get( '/用户', 'getUsers');
$ APP->交的( '/ userUpdates', 'userUpdates');
$ app-> post('/ insertUpdate','insertUpdate');
$ APP->删除( '/更新/删除/:UPDATE_ID /:USER_ID /:apiKey', 'deleteUpdate');
$ APP->的get( '/用户/搜索/:查询', 'getUserSearch');
$ app-> run();
//获取http://www.yourwebsite。
.....
}
功能 userUpdates()
{
$ =请求\苗条\苗条:: 的getInstance() - > 请求();
$ update = json_decode($ request-> getBody());
$ apiKey = $最新情况:> apiKey;
$ sever_apiKey = apiKey($ update-> user_id);
$ sql =“ SELECT A.user_id,A.username,A.name,A.profile_pic,B.update_id,B.user_update,B.created FROM users A,更新B WHERE A.user_id = B.user_id_fk ORDER BY B. update_id DESC “;
try {
if($ apiKey == $ sever_apiKey)
{
$ db = getDB();
$ stmt = $ db-> prepare($ sql);
$ stmt-> execute();
$ updates = $ stmt-> fetchAll(PDO :: FETCH_OBJ);
$ db = null ;
echo ' {“updates”: '。json_encode($ updates)。' } ';
}
}
赶上(PDOException $ E){
回声 ' { “错误”:{ “文”: '。$ e-> getMessage()。'}}';
}
}
功能 getUserUpdate($ UPDATE_ID){
.....
.....
(){
$ request = \ Slim \ Slim :: getInstance() - > request();
$ update = json_decode($ request-> getBody());
$ apiKey = $最新情况:> apiKey;
$ sever_apiKey = apiKey($ update-> user_id);
$ sql =“ INSERT INTO updates(user_update,user_id_fk,created,ip)VALUES(:user_update,:user_id ,:created ,:ip ) ”;
try {
if($ apiKey == $ sever_apiKey)
{
$ db = getDB();
$ stmt = $ db-> prepare($ sql);
$ stmt->bindParam(“user_update”,$ update-> user_update);
$ stmt-> bindParam(“user_id”,$ update-> user_id);
$ time = time();
$ stmt-> bindParam(“created”,$ time);
$ ip = $ _SERVER ['REMOTE_ADDR'];
$ stmt-> bindParam(“ip”,$ ip);
$ stmt-> execute();
$ update-> id = $ db-> lastInsertId();
$ db = null;
$ update_id = $ update-> id;
getUserUpdate($ update_id);
}
}
赶上(PDOException $ E){
回声 “ {”getMessage()。'}}';
}
}
函数deleteUpdate($ UPDATE_ID,$ USER_ID,$ apiKey)
{
$ sever_apiKey = apiKey($ USER_ID);
$ sql =“ DELETE FROM api_updates WHERE update_id =:update_id ”;
try {
if($ apiKey == $ sever_apiKey)
{
$ db = getDB();
$ stmt = $ db-> prepare($ sql);
$ stmt-> bindParam(“update_id”,$ update_id);
$ stmt->执行();
$ db = null;
回声真实;
}
}
赶上(PDOException $ E){
回声 ' {“error”:{“text”: '。$ e-> getMessage()。'}}';
}
}
功能 getUserUpdate($ UPDATE_ID){
// ......
// ......
}
// GET http://www.yourwebsite.com/api/users/search/sri
功能getUserSearch($查询) {
// .....
// ....
}
?>
Chrome扩展
在此处下载用于测试PHP restful API响应的扩展高级REST客户端应用程序
跨域访问
跨域系统是在两个或更多个不同域之间传输信息/数据。例如。abc.com到xyz.com
.htaccess
我修改了Slim Framework默认.htaccess代码以支持跨域支持。
RewriteEngine On
#某些主机可能要求您使用`RewriteBase`指令。
#如果需要使用`RewriteBase`指令,它应该是
包含此htaccess文件的目录的#绝对物理路径。
##
RewriteBase /
#跨域访问
标题添加 Access-Control-Allow-Origin“*”
标题添加 Access-Control-Allow-Headers“来源,x-requested-with,content-type”
标题添加 Access-Control-Allow-方法“ PUT,GET,POST,DELETE,OPTIONS ”
RewriteCond%{REQUEST_FILENAME }! - f
RewriteRule ^(。*)$ index.php [QSA,L]
了解有关使用CSS的状态消息设计的更多信息
Jquery
包含JavaScript和HTML代码,使用Jquery ajax将API数据解析为HTML格式。
<script src =“ http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js ”> </ script>
<script src =“ js / ajaxGetPost.js ”> </ script>
<script>
$(document)。ready(function()
{
var base_url =“ http://www.yourwebsite.com/project_name/ ”;
var url,encodedata;
$(“#update”)。focus();
/ *加载更新* /
url = base_url + ' api / updates ';
ajax_data(' GET ',url,function(data)
{
$。 }); / *插入更新* / $('body')。on(“click”,'。stpostbutton
',function()
{
var update = $('#update')。val();
encode = JSON。stringify({
“ user_update ”:update,
“ user_id ”:$(' #user_id ')。val()
});
url = base_url +' api / updates ';
if(update.length> 0)
{
post_ajax_data(url,encode,function(data)
{
$。each(data.updates,function(i,data)
{
var html =“ <div class ='stbody'id ='stbody ““'> <div class ='stimg'> <img src ='” + data.profile_pic + “'class ='stprofileimg'/> </ div> <div class ='sttext'> <strong>” + data.name + “</ strong>” + data.user_update + “<span id ='” + data.update_id + “'class ='stdelete'> 删除</ span> </ div> </ div> ”;
$(“#mainContent”)。prepend(html);
$('#update')。val('')。focus();
});
});
}
};
/ *删除更新* /
$(' 身体' )。on(“click”,“。stdelete ”,function()
{
var ID = $(this).attr(“id”);
url = base_url +' api / updates / delete / '+ ID;
ajax_data( ' DELETE ',URL,功能(数据)
{
$( “ #stbody ” + ID)。淡出(“慢”);
});
});
});
</ SCRIPT>
?
HTML代码
包含HTML代码。$(“body”)。on('click','。stpostbutton',function(){} - stpostbutton是POST按钮的ID名称。使用jquery stringify将输入数据转换为JSON格式。
<div>
<textarea id =“ update ”class =“ stupdatebox ”> </ textarea>
<input type =“ hidden ”id =“ user_id ”value =“ 用户会话值”>
<input type =“ submit ”value =“ POST “class =” stpostbutton “>
</ div> <div id =” mainContent “> </ div>
ajaxGetPost.js
Jquery Post,获取和删除Ajax函数。
// POST Ajax
函数post_ajax_data(url,encodedata,success)
{
$。ajax({
type:“ POST ”,
url:url,
data:encodedata,
dataType:“ json ”,
restful:true,
contentType:' application / json ',
cache:false,
timeout:20000,
async:true,
beforeSend:function (data){},
success:function(data){
success.call(this,data);
},
error:function(data){
alert(“连接错误”);
}
};
}
// GET和DELETE Ajax
函数ajax_data(type,url,success)
{
$。ajax({
type:type,
url:url,
dataType:“ json ”,
restful:true,
cache:false,
timeout:20000,
async:true,
beforeSend:function(data){},
success:function(data){
success .call(this,data);
},
error:function(data){
alert(“连接错误”);
}
};
}
内容总结
以上是互联网集市为您收集整理的使用Slim PHP Framework创建基于令牌的RESTful服务全部内容,希望文章能够帮你解决使用Slim PHP Framework创建基于令牌的RESTful服务所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。