º»ÀÎÀÌ »ý°¢ÇÏ´Â À¥¼ºñ½º´Â À̱âÁ¾°£ÀÇ Åë½ÅÀ» À§ÇÑ ¸öºÎ¸²? À̶ó°í »ý°¢ÇÑ´Ù. À¥¼ºñ½º´Â ajax ¿Í ¸¶Âù°¡Áö·Î ÇöÀç ÁøÇàÇüÀÌ´Ù. ÀÌ¹Ì µµÀÔÇÏ¿© ÀÌ¿ëÇϰí ÀÖ´Â °÷µµ ÀÖ°í °è¼ÓÇØ¼ ¹öÁ¯À» ¿Ã¸®¸ç Ä®³¯À» ¼¼¿ì°í ÀÖ´Â °÷µµ ÀÖ´Ù.
À¥¼ºñ½º´Â ¾î¶² ¾ð¾î·Î ±¸Çö‰ç´ÂÁö¿¡ »ó°ü¾øÀÌ ±× ¼ºñ½º¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ±¸ÇöÇØ¾ß ÇÏ´Â ±â¼ú·Î½á, ÀÌ·± Åë½ÅÀÌ °¡´ÉÅä·Ï Çϱâ À§ÇÑ °¡Àå ±âº»ÀûÀÎ Ãʼ®Àº HTTP Åë½Å ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇϰí ÀÖ´Ù´Â °Í°ú À̱âÁ¾°£ÀÇ µ¥ÀÌÅÍ Æ÷¸ËÀ» °í·ÁÇÏ¿© ÅØ½ºÆ® ±â¹ÝÀÇ XML À» »ç¿ëÇÑ´Ù´Â °ÍÀÌ´Ù.
Ajax ¸¦ ÀÌ¿ëÇØ¼ SOAP ÇÁ·ÎÅäÄÝÀ» ±â¹ÝÀ¸·Î ÀÛ¼ºµÈ À¥¼ºñ½º¿¡ Á¢±ÙÇÒ ¼ö ÀÖÀ»±î? °¡´ÉÇÏÁö¸¸ »ç½Ç ¾î·Æ´Ù. SOAP ÇÁ·ÎÅäÄÝÀº ½ÇÁ¦ XML °´Ã¼¸¦ ÆÄ¶ó¹ÌÅÍ·Î »ç¿ëÇϰí Àֱ⠶§¹®¿¡ Áö±Ý±îÁö ¿ì¸®°¡ ÇØ¿Â ¹æ½ÄÀÎ ½ºÆ®¸µ Á¶ÇÕ°¡Áö°í´Â »ó´çÈ÷ Èûµé´Ù. ¿Ö³ÄÇÏ¸é ½ºÆ®¸µÀ» Á¶ÇÕÇÏ´Â °úÁ¤¿¡¼ ¿¡·¯°¡ ³¯ ¼öÀÖ´Â È®·üÀÌ ¸Å¿ì ³ô±â ¶§¹®¿¡ ÁÁÀº ¹æ¹ýÀº ¾Æ´Ò °ÍÀÌ´Ù. ¶ÇÇÑ SOAP Àº GET ¹æ½ÄÀÌ ¾Æ´Ñ POST ¹æ½ÄÀ» ÁÖ·Î »ç¿ëÇØ¾ß ÇÑ´Ù. µû¶ó¼ Á» ´õ ½¬¿î ¹æ¹ýÀ¸·Î SOAP request À» À§ÇÑ Á¤Àû XML ÅÛÇø´À» XMLHttpRequest °¡ ·ÎµåÇÑ ÈÄ¿¡ DOM ¼Ó¼º°ú ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÏ¿© XML µ¥ÀÌÅ͸¦ Á¶ÀÛÇÏ´Â °ÍÀÌ ÈξÀ ¼ö¿ùÇÒ °ÍÀÌ´Ù.
SOAP À» ÀÌ¿ëÇÏ´Â °Í ¸»°í Á» ´õ ½¬¿î ¹æ¹ýÀÌ Á¸ÀçÇÑ´Ù. Representational State Transfer(REST) Àº À¥¼ºñ½º¸¦ ¾ÆÁÖ ½±°Ô ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ¼ºñ½º ÀÌ´Ù. REST ´Â SOAP °ú ºñ±³ÇÏÀÚ¸é 20%ÀÇ ³ë·ÂÀ¸·Î SOAP ÀÇ 80% ¿¡ ÇØ´çÇÏ´Â À̵æÀ» ÃëÇÒ ¼ö ÀÖ´Ù°í ÇÑ´Ù. Ajax ´Â REST ±â¹Ý À¥¼ºñ½º¿¡ ¾ÆÁÖ ÀûÇÕÇÏ´Ù. XHR °´Ã¼¸¦ ÀÌ¿ëÇØ¼ REST À¥¼ºñ½º¿¡ ºñµ¿±â·Î Á¢±ÙÇÏ°í ±× °á°ú´Â XML ·Î ¹Þ¾Æ¼ ºê¶ó¿ìÀú¿¡¼ ÆÄ½ÌÇÏ¿© »ç¿ëÇÏ¸é ³¡ÀÌ´Ù. ¾î¶²°¡? ¿ì¸®°¡ Áö±Ý±îÁö ÇØ¿À´ø ¹æ½Ä°ú ¾ÆÁÖ Èí»çÇÏÁö ¾ÊÀº°¡?
¿©±â¼ ÇѰ¡Áö ´õ ¤°í °¡¾ß ÇÒ °ÍÀº XHR °´Ã¼ÀÇ º¸¾È ¹®Á¦ÀÌ´Ù. ÀÌ ¹®Á¦´Â AJAX °ÀÇ 2Àå - XMLHttpRequest ¿ÀºêÁ§Æ® »ç¿ëÇϱ⿡¼ ¾ð±ÞÇÏ¿´´Ù. XHR °´Ã¼°¡ À¥¼ºñ½º¸¦ »ç¿ëÇÑ´Ù´Â °ÍÀº ÀڱⰡ ¼ÓÇØ ÀÖ´Â µµ¸ÞÀÎ ¹Û¿¡ ÀÖ´Â ¼¹öÀÇ ¸®¼Ò½º url ¿¡ Á¢±ÙÇÑ´Ù´Â ÀǹÌÀ̹ǷΠº¸¾È ¹®Á¦´Â ¹Ýµå½Ã ¹ß»ýÇÏ°Ô µÇ¾î ÀÖ´Ù. µû¶ó¼ ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ´Â °ÔÀÌÆ®¿þÀÌ ±â´ÉÀ» ÇÏ´Â ÇÁ·Î±×·¥À» Ãß°¡·Î °³¹ßÇØ¾ß ÇÑ´Ù. Ç¥ÇöÀÌ °ÔÀÌÆ®¿þÀ̶ó ±×·²µíÇØ º¸ÀÌÁö¸¸ ÄÚµùÀº ±²ÀåÈ÷ °£´ÜÇÏ´Ù. °ÔÀÌÆ®¿þÀÌ ±â´ÉÀº ³×Æ®¿÷ ÇÁ·Î±×·¥À¸·Î ¼¹öÂÊ ÇÁ·Î±×·¥¿¡¼ ±¸ÇöÇÒ °ÍÀÌ´Ù.
À̹øÀåÀÇ »ùÇà ÇÁ·Î±×·¥Àº ¾ßÈÄ¿¡ ±¸ÇöµÇ¾î ÀÖ´Â REST À¥¼ºñ½º¿¡ Á¢±ÙÇÏ¿© ±× °á°ú¸¦ º¸¿©ÁÖ´Â ÇÁ·Î±×·¥ÀÌ´Ù.
[»ùÇñ¸Çöº¸±â]
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Yahoo! Search Web Services</title>
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function doSearch() {
var url = "example15.php?" + createQueryString() + "&ts=" + new Date().getTime();
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
}
function createQueryString() {
var searchString = document.getElementById("searchString").value;
searchString = escape(searchString);
var maxResultsCount = document.getElementById("maxResultCount").value;
var queryString = "query=" + searchString + "&results=" + maxResultsCount;
return queryString;
}
function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
//alert('handleStateChange');
parseSearchResults();
}
else {
alert("Error accessing Yahoo! search");
}
}
}
function parseSearchResults() {
var resultsDiv = document.getElementById("results");
//alert(resultsDiv.childNodes.length);
while(resultsDiv.childNodes.length > 0) {
resultsDiv.removeChild(resultsDiv.childNodes[0]);
}
var allResults = xmlHttp.responseXML.getElementsByTagName("Result");
var result = null;
for(var i = 0; i < allResults.length; i++) {
result = allResults[i];
parseResult(result);
}
}
function parseResult(result) {
var resultDiv = document.createElement("div");
var title = document.createElement("h3");
title.appendChild(document.createTextNode(getChildElementText(result, "Title")));
resultDiv.appendChild(title);
var summary = document.createTextNode(getChildElementText(result, "Summary"));
resultDiv.appendChild(summary);
resultDiv.appendChild(document.createElement("br"));
var clickHere = document.createElement("a");
clickHere.setAttribute("href", getChildElementText(result, "ClickUrl"));
clickHere.appendChild(document.createTextNode(getChildElementText(result, "Url")));
resultDiv.appendChild(clickHere);
document.getElementById("results").appendChild(resultDiv);
}
function getChildElementText(parentNode, childTagName) {
var childTag = parentNode.getElementsByTagName(childTagName);
return childTag[0].firstChild.nodeValue;
}
</script>
</head>
<body>
<h1>Web Search Using Yahoo! Search Web Services</h1>
<form action="#">
Search String: <input type="text" id="searchString"/>
<br/><br/>
Max Number of Results:
<select id="maxResultCount">
<option value="1">1</option>
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
</select>
<br/><br/>
<input type="button" value="Submit" onClick="doSearch();"/>
</form>
<h2>Results:</h2>
<div id="results"/>
</body>
</html>
<example15.html ÀÇ Àüü ¼Ò½º ÄÚµå>
<?
class getUrlClass{
function getUrlClass(){
}
function getTargetUrl(){
$url = $this->url."&query=$this->query&results=$this->results";
$fd = fopen ($url, "r");
while (!feof ($fd)) {
$this->buffer .= fgets($fd, 4096);
}
fclose ($fd);
header("Content-type: text/xml");
echo $this->buffer;
}
}
$myurl = new getUrlClass();
$myurl->query=$query;
$myurl->results=$results;
$myurl->url = "http://api.search.yahoo.com/WebSearchService/V1/webSearch?appid=thunderboltsoftware&type=all";
$myurl->getTargetUrl();
?>
<example15.php ÀÇ Àüü ¼Ò½º ÄÚµå>
[»ùÇñ¸Çöº¸±â]