⑴ 怎麼用php開發API供其他客戶端調用
一、介面的分類:
1、URL類型的介面
URL
路由帶參數式的介面!這個很好做!只要有過Web開發經驗的人都能完成!這種介面數據不夠隱蔽性,可以直接在瀏覽其中看到,如支付寶的交易請求URL。需
要加一個MD5簽名,和伺服器端的再次向支付寶伺服器發送驗證!雖然soap方式傳遞的數據隱蔽性很好!但為了數據安全,難免也需要進行數據簽名。
2、SOAP類型的介面
無關編程語言、無關平台、擴展性很好,要實現一個SOAP 型的介面,有兩種方式:一種有WSDL文件方式、一中無WSDL文件方式!
對
於熱愛研究型的人來說,使用第一種方式可以讓你清楚的了解PHP是怎麼創建了一個Web
Service!但第一種對於新手來說,創建一個XML格式的WSDL文件,是比較難的,這你的先了解熟悉什麼是XML!學會XML語法!但對於一個急於
解決問題的人來說!沒有這么多的時間去熟悉!所以這是件煩惱的事!
二、PHP環境設置
先配置下PHP的soap環境支持:
找到php.ini文件
;extension=php_soap.dll
刪除掉";" ,重啟apache伺服器
為了便於測試,需要關於wsdl緩存
方式1:
配置文件:php.ini 選項 soap.wsdl_cache_enabled 設置為0
方式2:
代碼頭添加:ini_set('soap.wsdl_cache_enabled', "0"); //關閉wsdl緩存
三、有WSDL文件方式創建
在
這里先介紹標準的webservice。 那麼如何創建wsdl呢?對於PHP來說這確實是件很不容易的事情,有人說用zend
studio創建很方便,這是一種方法。但對於那些不喜歡用zend studio的人來說,會覺得創建一個web service還要安裝zend
studio,太強人所難了。
在這里介紹一個簡單的方法,到網上下載SoapDiscovery.class.php類,裡面有個公用方法:getWSDL,這個方法末尾是用的 return,那麼,你修改一下這個方法:
//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');
//生成wsdl文件,將上面的return注釋
$fso = fopen($this->class_name . ".wsdl" , "w");
fwrite($fso,
sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL,
$serviceWSDL, $messageWSDL, '</definitions>'));
現在生成wsdl的類有了,SoapDiscovery.class.php(源碼在最末尾)。
再准備一個提供服務的Service.php類文件或者函數就可以創建wsdl了!
⑵ php開發api介面,如何做才算是安全的
這個問題很深
安全,不敢當,因為web安全問題很多,不僅僅是PHP編碼而已,有很多安全上的問題需要做處理,像伺服器漏洞、埠開放都會導致被黑,這都是很正常的。
只能說 比如在我做PHP開發過程的一些安全保護和在網路安全公司開發時的工作要求:
1、最基礎的,提供的api介面 要配置https。
2、api返回響應的信息,要盡可能使用消息加密返回,如高位數的 rsa加密內容。
3、接收的回調開放介面,盡可能做到使用回調黑、白名單,如加ip白名單放行,或ip黑名單禁止訪問。
4、不要相信用戶輸入、輸入信息要進行編碼轉換、轉義、過濾、使用框架和插件進行處理,如MySQL查詢的要進行參數綁定、如顯示問題要避免xss攻擊會進行過濾。
5、授權操作,錯誤限制設置閥值、超過閥值限制訪問、如最基礎的登錄功能。
6、常見額弱口令問題導致漏銅,應設置高強度口令,避免程序爆破。
7、文件上傳問題、應嚴格校驗文件類型、後綴、格式、及文件目錄許可權設置,從而避免文件上傳漏洞導致惡意代碼或webshell攻擊。
8、開發環境和生產環境隔開,不要再生產上面開debug、及時更新使用框架漏洞補丁如PHP國內常用 tp系列以前偶爾爆出漏洞(我用的較多就是tp5 ....),還有框架不要用最新要選擇最穩定的。
最後注意不管是驗證還是過濾,在客戶端執行過一次也好,在服務端,都要再次執行驗證和校驗。
和盛之文 我的文章保存網站,歡迎訪問學習或參考
⑶ 如何使用 php 開發 api
比如一個自定義函數:function test(){echo 『hello world』;}就可以叫做 api。api 既可以是單個的函數,也可以是封裝在類里的方法,當然它們也是程序代碼。開發一個 api 的流程可以很簡單,也可以很復雜,視具體的編程任務而決定,並沒有特定的規則。比如,你需要為自己建立一個常用的函數庫,命名為 my.lib.php然後把你自己編寫的自定義函數,全部寫在這個文件裡面,那麼,你就擁有了自己的api。開發的時候,只需要引入 my.lib.php,你就可以調用自己的 api 了。這是一個比較簡單的例子。稍微復雜一點的,你可以把函數封裝在類裡面,方便繼承和重用,還可以根據函數名稱做一些程序設計,這個一句話說不清楚,給一個簡單的例子吧:class mylib{function showmy(){echo 『這是我的一個類方法』;}}調用的時候,先要實例化類,然後再調用方法。再復雜一點的就是使用類介面,區別就是介面裡面定義的只是方法原型,而你需要通過具體的類來實現介面中的函數,具體請參考 php 手冊,關於介面的介紹。還有一種介面不是通過直接訪問介面代碼來實現功能的,這就是我們常說的 web service,俗稱遠程調用:比如:我的一個網站 www.test.com/api在這個網址里包含了我開放的一些介面,可以供網路上的其它用戶來獲取我網站的會員信 息 等 , 假 設 這 個 接 口 名 叫 userinfo , 那 么 開 發 者 可 以 通 過www.test.com/api/userinfo 來獲取某一個會員的信息,當然具體的代碼肯定很多,這里只是舉例子說明。尤其要著重說明的是,開發者不是通過直接訪問 www.test.com/api/userinfo 來獲取用戶信息的,當向別人開發自己網站的介面時,你需要編寫一些介面文件,供別人來使用 ,一般可以通過 fsockopen 函數來實現。
⑷ 如何使用MixPHP來開發API介面
下面做一個開發 API 介面的簡單實例:
從articles表,通過id獲取一篇文章。
訪問該介面的 URL:
1
http://www.e.com/articles/details?id=1
資料庫表結構如下:
1
2
3
4
5
6
7
CREATE TABLE `articles` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` varchar(255) NOT NULL,
`dateline` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第一步
修改資料庫配置文件,MixPHP 的應用配置文件中,關於資料庫的信息都引用了 common/config/database.php 文件。
框架默認的 404/500 響應是網頁,而 API 服務需要響應 JSON 數據,通常其他傳統 MVC 框架需要修改很多地方才可完成這個需求,MixPHP 本身就提供該種配置,只需修改一下配置即可。
MixPHP 的默認 Web 應用中有兩個配置文件,分別為:
main.php : 部署在 mix-httpd 時使用。
main_compatible.php :部署在 Apache/PHP-FPM 時使用。
開發 API 時我們推薦在 Apache/PHP-FPM 下開發,上線再部署至 mix-httpd 即可,反正是無縫切換的。
現在我們修改 response 鍵名下的 defaultFormat 鍵為 mixhttpError::FORMAT_JSON,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 響應
'response' => [
// 類路徑
'class' => 'mixhttpcompatibleResponse',
// 默認輸出格式
'defaultFormat' => mixhttpResponse::FORMAT_JSON,
// json
'json' => [
// 類路徑
'class' => 'mixhttpJson',
],
// jsonp
'jsonp' => [
// 類路徑
'class' => 'mixhttpJsonp',
// callback鍵名
'name' => 'callback',
],
// xml
'xml' => [
// 類路徑
'class' => 'mixhttpXml',
],
],
然後修改 main_compatible.php 文件中 error 鍵名下的 format 鍵為 mixhttpError::FORMAT_JSON,如下:
1
2
3
4
5
6
7
// 錯誤
'error' => [
// 類路徑
'class' => 'mixhttpError',
// 輸出格式
'format' => mixhttpError::FORMAT_JSON,
],
第三步
創建控制器:
1
apps/index/controllers/ArticlesController.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
<?php
namespace appsindexcontrollers;
use mixfacadesRequest;
use mixhttpController;
use appsindexmessagesErrorCode;
use appsindexmodelsArticlesForm;
class ArticlesController extends Controller
{
public function actionDetails()
{
// 使用模型
$model = new ArticlesForm();
$model->attributes = Request::get();
$model->setScenario('actionDetails');
if (!$model->validate()) {
return ['code' => ErrorCode::INVALID_PARAM];
}
// 獲取數據
$data = $model->getDetails();
if (!$data) {
return ['code' => ErrorCode::ERROR_ID_UNFOUND];
}
// 響應
return ['code' => ErrorCode::SUCCESS, 'data' => $data];
}
}
創建錯誤碼類:
1
apps/index/messages/ErrorCode.php
1
2
3
4
5
6
7
8
9
10
11
12
<?php
namespace appsindexmessages;
class ErrorCode
{
const SUCCESS = 0;
const INVALID_PARAM = 100001;
const ERROR_ID_UNFOUND = 200001;
}
創建表單驗證模型:
1
apps/index/models/ArticlesForm.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
33
34
35
<?php
namespace appsindexmodels;
use mixvalidatorsValidator;
use appscommonmodelsArticlesModel;
class ArticlesForm extends Validator
{
public $id;
// 規則
public function rules()
{
return [
'id' => ['integer', 'unsigned' => true, 'maxLength' => 10],
];
}
// 場景
public function scenarios()
{
return [
'actionDetails' => ['required' => ['id']],
];
}
// 獲取詳情
public function getDetails()
{
return (new ArticlesModel())->getRowById($this->id);
}
}
創建數據表模型:
1
apps/common/models/ArticlesModel.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
namespace appscommonmodels;
use mixfacadesRDB;
class ArticlesModel
{
const TABLE = 'articles';
// 獲取一行數據通過id
public function getRowById($id)
{
$sql = "SELECT * FROM `" . self::TABLE . "` WHERE id = :id";
$row = RDB::createCommand($sql)->bindParams([
'id' => $id,
])->queryOne();
return $row;
}
}
以上就是全部代碼的編寫。
⑸ 如何用PHP開發API介面
他會提供相應介面給你的,具體調用方法就相當於講求某個鏈接。act=get_user_list&type=json在這里operate.php相當於一個介面,其中get_user_list 是一個API(獲取用戶列表),講求返回的數據類型為JSON格式。
act=get_user_list&type=json';$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);curl_setopt($ch,CURLOPT_POST,1);//啟用POST提交$file_contents=curl_exec($ch);curl_close($ch);
⑹ php如何開發API介面
比如一個自定義函數:function test(){echo 『hello world』;}就可以叫做 api。api 既可以是單個的函數,也可以是封裝在類里的方法,當然它們也是程序代碼。開發一個 api 的流程可以很簡單,也可以很復雜,視具體的編程任務而決定,並沒有特定的規則。比如,你需要為自己建立一個常用的函數庫,命名為 my.lib.php然後把你自己編寫的自定義函數,全部寫在這個文件裡面,那麼,你就擁有了自己的api。開發的時候,只需要引入 my.lib.php,你就可以調用自己的 api 了。這是一個比較簡單的例子。稍微復雜一點的,你可以把函數封裝在類裡面,方便繼承和重用,還可以根據函數名稱做一些程序設計,這個一句話說不清楚,給一個簡單的例子吧:class mylib{function showmy(){echo 『這是我的一個類方法』;}}調用的時候,先要實例化類,然後再調用方法。再復雜一點的就是使用類介面,區別就是介面裡面定義的只是方法原型,而你需要通過具體的類來實現介面中的函數,具體請參考 php 手冊
⑺ 哪位有thinkphp api介面開發視頻教程啊
Peter
鏈接: https://pan..com/s/1wnjgdabRiE_jXg1mhYbHig
若資源有問題歡迎追問~
⑻ PHP如何開發api介面安全驗證實例
在實際工作中,使用PHP寫api介面是經常做的,PHP寫好介面後,前台就可以通過鏈接獲取介面提供的數據,而返回的數據一般分為兩種情況,xml和json,在這個過程中,伺服器並不知道,請求的來源是什麼,有可能是別人非法調用我們的介面,獲取數據,因此就要使用安全驗證。
⑼ PHP網站如何使用API介面
聚合數據的api一般都有文檔,你要實現什麼功能,看他啥說明,你自己編寫代碼就可以了,沒有文檔的話那就自己測試api功能,然後再寫處理,調用吧,還不會的話寫可以找額代開發或者指導教學
⑽ php怎麼寫api介面
api和WEB開發一樣,首先是需要一些相關參數,這類參數,會有客戶端傳過來,也許是POST或GET,這需要制定統一規范或者開發團隊約定好。而有了參數後,可根據應用需求,完成其數據處理。數據邏輯處理完後,返回客戶端所需要用到的相關數據,例如:任務狀態、內購結果、玩家信息等等數據怎麼返給客戶端?直接輸出的形式,如:JSON、XML、TEXT 等等。