Heim  >  Artikel  >  Backend-Entwicklung  >  Testen der PHP-API-Schnittstelle

Testen der PHP-API-Schnittstelle

小云云
小云云Original
2018-03-20 15:03:266749Durchsuche

Ich habe in letzter Zeit API-Schnittstellen geschrieben. Jedes Mal, wenn ich eine Schnittstelle schreibe, muss ich sie zuerst selbst testen, um festzustellen, ob es Syntaxfehler gibt und ob die angeforderten Daten korrekt sind Ich kann den Link zum Testen nicht direkt im Browser öffnen, daher muss es ein Simulationstool geben, das HTTP-Anfragen lokal senden kann, um Datenanfragen zu simulieren.
Das habe ich am Anfang gemacht: Ich habe eine Datei im lokalen Wampserver-Laufverzeichnis erstellt, darin Curl-Anfragen geschrieben und jeweils simulierte Anforderungstests durchgeführt Schnittstellenanforderungen Die Parameter sind alle unterschiedlich. Ich muss die angeforderten Parameter und die API ständig ändern, was sehr unpraktisch ist. Später konnte ich die unordentlichen Daten in meiner Anforderungsdatei nicht unterscheiden:

Ich habe im Internet nach verwandten Tools gesucht und es gibt viele Online-Tests, wie zum Beispiel: ATOOL Online-Tools, Apizza usw ., ich habe sie mir angesehen und sie machen alle gute Arbeit, sind sehr einfach zu bedienen, die Benutzeroberfläche ist schön und der Service ist sehr rücksichtsvoll. Aber ich denke über Sicherheitsprobleme nach, und gleichzeitig gibt es mir die ursprünglichen Daten im JSON-Format zurück, wie ich es gewohnt bin Betrachten von Arrays Das Format ist relativ intuitiv.
Im Einklang mit dem Konzept, genügend Lebensmittel und Kleidung zu haben, habe ich lokal eine einfache API-Testseite geschrieben und die API-Anforderungstestfunktion lokal implementiert Probleme, und ich konnte die Ergebnisse nach Belieben konvertieren. Dazu sind nur zwei Dateien erforderlich: eine ist die Seite post.html, die die Daten ausfüllt, und die andere ist die Datei post.php, die die Daten von der Seite post.html empfängt und die Anforderung zur Implementierung der Funktion verarbeitet .
1. Die Frontend-Seitendatei post.html


ist nur eine einfache Seite, kein komplexes Layout, keine JS-Effekte, einfach write Es gibt 6 Parameter, die im Allgemeinen ausreichen. Wenn nicht, können Sie sie selbst hinzufügen. Standardmäßig werden hier Body-Anfrageparameter übergeben und für Anfragemethoden werden nur GET und POST verwendet.

<html xmlns="http://blog.csdn.net/sinat_35861727?viewmode=contents">

<head>
	<meta http-equiv = "Content-Type" content = "text/html;charset = utf8">
	<meta name = "description" content = "提交表单">
	<title>API接口请求表单</title>
</head>
	<style type="text/css">
		.key1{
			width:100px;
		}
		.value1{
			width:230px;
			margin:0 0 0 10px;
		}
		.main{
			margin:0 auto;
			width:450px;
			height:auto;
			background:lightgray;
			padding:40px 40px;
		}
		.refer{
			width:100px;
			height:24px;
		}
		.url{
			width:350px;
		}
	</style>
<body>

<p class="main">
	<form method="POST" action="post.php" target="_blank">
		<p>请求地址:<input class="url" type="text" name="curl" placeholder="API接口地址"></p>
		<p>参 数1: <input class="key1" type="text" name="key1" placeholder="参数名">
					 <input class="value1" type="text" name="value1" placeholder="参数值"></p>
		<p>参 数2: <input class="key1" type="text" name="key2" placeholder="参数名">
					 <input class="value1" type="text" name="value2" placeholder="参数值"></p>
		<p>参 数3: <input class="key1" type="text" name="key3" placeholder="参数名">
					 <input class="value1" type="text" name="value3" placeholder="参数值"></p>
		<p>参 数4: <input class="key1" type="text" name="key4" placeholder="参数名">
					 <input class="value1" type="text" name="value4" placeholder="参数值"></p>
		<p>参 数5: <input class="key1" type="text" name="key5" placeholder="参数名">
					 <input class="value1" type="text" name="value5" placeholder="参数值"></p>
		<p>参 数6: <input class="key1" type="text" name="key6" placeholder="参数名">
					 <input class="value1" type="text" name="value6" placeholder="参数值"></p>
		<p>请求方式: <select name="method">
			<option value="POST">POST请求</option>
			<option value="GET">GET请求</option>
		</select></p>
		<p style="text-align:center;"><input class="refer" type="submit" value="提交"></p>
	</form>
</p>
</body>


</html>


2. Die Datenverarbeitungsdatei post.php

empfängt die Daten von der Seite post.html, sendet eine Anfrage und verarbeitet dann das Anfrageergebnis von der Front-End-Seite Es ist der Body-Anforderungsparameter. Wenn Sie den Header-Parameter noch benötigen, können Sie ihn manuell in dieser Datei hinzufügen.

<?php

echo &#39;<title>API接口请求响应</title>&#39;;

/**
 * 设置网络请求配置
 * @param  [string] $curl 请求的URL
 * @param  [bool]   true || false 是否https请求
 * @param  [string] $method 请求方式,默认GET
 * @param  [array]  $header 请求的header参数
 * @param  [object] $data PUT请求的时候发送的数据对象
 * @return [object] 返回请求响应
 */
function ihttp_request($curl,$https=true,$method=&#39;GET&#39;,$header=array(),$data=null){
	// 创建一个新cURL资源
	$ch = curl_init();
	
	// 设置URL和相应的选项
	curl_setopt($ch, CURLOPT_URL, $curl);    //要访问的网站
	//curl_setopt($ch, CURLOPT_HEADER, false); 
	curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

	if($https){
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
		//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);
	}
	if($method == &#39;POST&#39;){
		curl_setopt($ch, CURLOPT_POST, true);  //发送 POST 请求
		curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	}
	
	
	// 抓取URL并把它传递给浏览器
	$content = curl_exec($ch);
	if ($content  === false) {
	  return "网络请求出错: " . curl_error($ch);
	  exit();
	}
	//关闭cURL资源,并且释放系统资源
	curl_close($ch);
	
	return $content;
}

//检查是否是链接格式
function checkUrl($C_url){  
    $str="/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(?:[\/\?#][\/=\?%\-&~`@[\]\&#39;:+!\.#\w]*)?$/";  
    if (!preg_match($str,$C_url)){  
        return false;  
    }else{  
		return true;  
    }  
}  

//检查是不是HTTPS
function check_https($url){
	$str="/^https:/";
	if (!preg_match($str,$url)){  
        return false;  
    }else{  
		return true;  
    }  
}

if($_SERVER[&#39;REQUEST_METHOD&#39;] != &#39;POST&#39;) exit(&#39;请求方式错误!&#39;);


//发送请求
function curl_query(){
	$data = array(
		$_POST[&#39;key1&#39;] => $_POST[&#39;value1&#39;],
		$_POST[&#39;key2&#39;] => $_POST[&#39;value2&#39;],
		$_POST[&#39;key3&#39;] => $_POST[&#39;value3&#39;],
		$_POST[&#39;key4&#39;] => $_POST[&#39;value4&#39;],
		$_POST[&#39;key5&#39;] => $_POST[&#39;value5&#39;],
		$_POST[&#39;key6&#39;] => $_POST[&#39;value6&#39;]
	);
	//数组去空
	$data = array_filter($data);					//post请求的参数
	if(empty($data)) exit(&#39;请填写参数&#39;);
	
	$url = $_POST[&#39;curl&#39;];							//API接口
	if(!checkUrl($url)) exit(&#39;链接格式错误&#39;);		//检查连接的格式
	$is_https = check_https($url);   				//是否是HTTPS请求

	$method = $_POST[&#39;method&#39;];						//请求方式(GET POST)
	
	$header = array();								//携带header参数
	//$header[] = &#39;Cache-Control: max-age=0&#39;;
	//$header[] = &#39;Connection: keep-alive&#39;;
	
	if($method == &#39;POST&#39;){
		$res = ihttp_request($url,$is_https,$method,$header,$data);
		print_r(json_decode($res,true));
	}else if($method == &#39;GET&#39;){
		$curl = $url.&#39;?&#39;.http_build_query($data);	//GET请求参数拼接
		$res = ihttp_request($curl,$is_https,$method,$header);
		print_r(json_decode($res,true));
	}else{
		exit(&#39;error request method&#39;);
	}

}

curl_query();

?>

Das Schreiben ist sehr einfach und die Funktionen sind nicht sehr umfassend. Unter normalen Umständen können die POST- und GET-Anfragen immer noch erfüllt werden. Zumindest ist es kein Problem, die Ergebnisse des lokalen Tests zu überprüfen Freunde, die es benötigen, können den Code herunterladen und ihn dann ändern, um die Funktion entsprechend ihren eigenen Bedürfnissen zu verbessern.

Verwandte Empfehlungen:

Gadget zum Testen der PHP-API-Schnittstelle

Das obige ist der detaillierte Inhalt vonTesten der PHP-API-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn