在上一篇提到介接Json資料的主程式內時呼叫函數GetJsonContent,而這個函數的作用是甚麼?
不是已經給他目標網址了,為甚麼還要使用難樹來處理Url,當然沒個語法有不同之處,若在
單機可僅給目標網址即可下在所需的介接資料,而目前是Web必須告訴伺服器要處理甚麼事情。
舉例說我在自己的房間跟自己說要跟小明借5萬元,但小明並不知道你要跟他借錢,因此你必
須跟小明見面或電話告知你要跟他借5萬元;在這個過程的見面或電話告知就是該範例函數的
作用,大致上是這樣一個邏輯,所以下圖為函數的程式碼
string content = GetJsonContent("https://www.ktec.gov.tw/ktec_api.php?type=json");
這是主程式目標網址,但前面有GetJsonContent為函數,就是將目標網址該字串丟入函數中。
private static string GetJsonContent(string Url)
{
程式區塊
}
在函數中第一行可看到設定私有,也就是外部的類別是無法法存取,將處理的結果直接呈現,
所以主程式有呼叫函數執行,以下為程式說明。
static 靜態宣告,靜態方法在程式加載時就已經存在,故在使用前無需初始化(new)就能直接訪問。
void 沒有返回值宣告,也就是要return 關鍵字。
string targetURI = Url;
var request = System.Net.WebRequest.Create(targetURI);
- 設字串targetURL來接丟進副程式字串參數string Url。設變數request來向targetURI網址送出請求,怎麼請求?使用【System.Net命名空間】中的【WebRequest類別】的【create方法】來向【targetURI】請求
- 告訴伺服器端,即將傳輸的請求資料的MIME類型
- 設變數response來接送出請求之伺服器之response。
string text;
using (var sr = new StreamReader(response.GetResponseStream()))
{
text = sr.ReadToEnd();
}
- 建立一個字串text,方便後面使用
- 利用response.GetResponseStream()方法,回傳來自網際網路資源的資料流(stream),並透過初始化StreamReader類別來從資料流中(Stream)讀取字元,最後再建立一個物件sr來接。
- using 陳述式:在建立物件sr的當時,使用 using 陳述式,當這個區塊程式碼結束執行之後,能確保該物件所佔用的資源一定會被完整釋放。
- ReadToEnd()方法是直接讀取資料流中,目前位置開始到整個資料流結束的所有字元,並且回傳string 型別結果字串,代入前面建立的字串text。
- 將函數設為靜態static,直要程式家在函數就存在無須初始化,對於介接程式而言會隨時目標網址資料會隨時更新,因此設為靜態。
- 將目標網址設定一個變數,供函數內使用,方便後面對於網址字串處理。
- 要求目標網址Request,並告訴伺服器目標網址的資料為Json,字元為Utf-8。
- 伺服器回應Respone,並設一個變數接伺服器的回應。
- 羧後將結果傳回函數中。
需要如此大費周章地處理,原因為Web也就是三層式的架構,你必須在中間告知你者個
網址要做些甚麼,其實在MVC中的Contro中也是在處理中間這一段網路的路由。
對於單跡象R語言相對對於目標網址的要求,就是點對點很直覺無須處理中間層的需求。
沒有留言:
張貼留言