close

做這件事情只是我很好奇 為什麼 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

  1. 承接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 來達到這樣的需求..........

 

arrow
arrow
    文章標籤
    .net WebApi Delphi
    全站熱搜

    kuraki5336 發表在 痞客邦 留言(2) 人氣()