做這件事情只是我很好奇 為什麼 Delphi 一值沒辦法串好restrul API
有時候這樣寫可以有時候就不行....
介紹三種常見的API使用方式
#1 URL 直接帶入參數
#2 Body參數
#3 Uri 帶入參數
#1 .net 實作
#2. net 實作
#3 .net 實作
完成之後可以透過Swaage稍微看一下API是否都正常運作
Content-Type 很重要 application/json
Accept 是看你回傳要怎麼接值,如果很會XML 你就寫 application/xml
一般不用設定 預設是application/json
OK這邊我們寫好了服務就用POSTMAN來先測試
#1 URL 直接帶入參數
※............就是這麼簡單 把 http://localhost:65240/v1/User/{ID},帶入即可
#2 Body參數
※ 重點是需要把傳入值組成Json 如果Content-type不是JOSN則要換哦,再來還有必須把傳入改的型態改成raw
#3 Uri 帶入參數
※ 可以從POST上得http://localhost:65240/v1/UserUrl?id=001 ,這種好像也是我們最常見的
技術文件也會說請使用POST json傳遞 ,無論是slack FBAPI LINEBOT 都是這種的
透過Delphi 似乎都可以接,但其實他們之間多少有些差異
Delphi 撰寫Body & UrI 類型的 都是很簡易的,就不提第一個了,那個必須得組網址..........那個必須得組網址..........那個必須得組網址..........
Delphi 串WebAPI
- 承接Body的方法
{ TODO : 用可視物件,自己Create TRESTClient}
RESTClient1.BaseURL := 'http://localhost:65240/v1/User';
RESTClient1.ContentType := 'application/json';
req := TRESTRequest.Create(nil);
req.Client := RESTClient1;
req.Method := TRESTRequestMethod.rmPOST;
req.Response := RESTResponse1;
JsonData := TJSONObject.Create;
req.AddParameter('id', '002');
req.AddParameter('Name', '003');
req.Execute;
memo1.Text := RESTResponse1.JSONText
2. 承接URI的方法
RESTClient1.BaseURL := 'http://localhost:65240/';
RESTClient1.ContentType := 'application/json';
req := TRESTRequest.Create(nil);
req.Client := RESTClient1;
req.Resource := 'v1/UserUri?id={id}';
{ TODO : 很重要,後面的參數必須給,不給的話預設會是Body的 }
req.AddParameter('id', '002', TRESTRequestParameterKind.pkURLSEGMENT);
req.Method := TRESTRequestMethod.rmPOST;
req.Response := RESTResponse1;
req.Execute;
memo1.Text := RESTResponse1.JSONText
感想
會測試這個最大的原因是其實像在測試LINEBOT 或者是 FB的BOT的時候他們兩種都有支援。
但我自己寫出來的API都只能接一個。以為可以兩種方式寫成一個API
但是因為ROUTE的特性勢必是不可能因此
只能寫兩個ROUTE 來達到這樣的需求..........