iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 4
0
自我挑戰組

程式翻轉-API學習從無到有(有嗎?)系列 第 4

DAY 4 API返回值類型分類

  • 分享至 

  • xImage
  •  

今天就來跟大家說一下 Web API 有哪寫返回值類型吧
剛開始我只知道兩種(我還以為就這兩種/images/emoticon/emoticon16.gif
後來我才知道它還有另外兩種返回值類型
而且經過爬文才知道
最推薦的是後來發現的
我真的是孤陋寡聞阿(沒關係,反正我是菜鳥別人會體諒

四大分類

一 void
這個想畢大家都很熟悉吧
就是沒有回傳值的方法
就是呼叫後,不需要return
sever端會幫你回傳標準的204(No Content)的Http回應
給Client端(這段我上網找了頗久,之前我還以為是直接斷開/images/emoticon/emoticon16.gif

範例:

        public void Delete(int id)
        {
        }

呼叫結果如圖
https://ithelp.ithome.com.tw/upload/images/20181004/201070385mnxbcmxtQ.jpg

二 一般對象(string,int...)
這就是大家最常用
同時也最熟悉的寫法吧
你寫什麼回傳型態
就要回傳甚麼型態的資料
我之前大都用這種寫法~~

範例:

        public string Get()
        {
            return "value";
        }

這裡理所當然會回傳一組字串
"value"
呼叫結果如圖
https://ithelp.ithome.com.tw/upload/images/20181004/20107038pXjeNaj1mN.jpg

接下來就是重點了
前面畢竟還有接觸過
接下來就....

三 HttpResponseMessage
這東西很妙
因為它可以自定義sever端回傳的狀態
也就是說可以不用系統自動產生的
而是由我們決定
當然還是可以用系統產生的啦
而回傳的東西也很有趣

範例(我這邊用的是微軟的範例

public class ValuesController : ApiController
{
    public HttpResponseMessage Get()
    {
        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value");
        response.Content = new StringContent("hello", Encoding.Unicode);
        response.Headers.CacheControl = new CacheControlHeaderValue()
        {
            MaxAge = TimeSpan.FromMinutes(20)
        };
        return response;
    } 
}

回應:

        HTTP/1.1 200 OK
        Cache-Control: max-age=1200
        Content-Length: 10
        Content-Type: text/plain; charset=utf-16
        Server: Microsoft-IIS/8.0
        Date: Mon, 27 Jan 2014 08:53:35 GMT

        hello

它回傳的狀態是 HttpStatusCode.OK
回傳的文字 hello
文字格式 Encoding.Unicode

這寫法的優點
是可以控制的回應訊息很多

四 IHttpActionResult
/images/emoticon/emoticon31.gif
這很重要!!!
這很重要!!!
這很重要!!!

因為很重要所以打三次~~

就我看上網爬文
大多的推薦回傳型態都是用這個寫

IHttpActionResult Web API 2 中引進了介面。 基本上,它會定義HttpResponseMessage factory。
至於甚麼是 factory 相信大家都知道(除了我,我還研究了一陣子

IHttpActionResult包含單一方法ExecuteAsync,以非同步方式建立HttpResponseMessage執行個體。

        public interface IHttpActionResult
        {
            Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken);
        }

我就用我的程式碼簡單舉例一下好了

        public IHttpActionResult delete(int id)
        {           
            return Ok(id);
        }

Ok的部分就是 HttpResponseMessage 回傳狀態(又分BadRequest,Conflict,Ok,NotFound....等
id就是我上面傳進來的 int(但是也可以回傳諸多類型,例如我們最常用的類別,當然最普通的string也是可以啦

哈哈
好啦~今天就先到這裡
整理這些東西對我這個菜鳥來說真的不容易
有甚麼觀念錯誤的地方請諸位大大好心提出喔/images/emoticon/emoticon41.gif

以下在附上微軟解釋以上四種東西的圖表
https://ithelp.ithome.com.tw/upload/images/20181004/201070388MxvmvITTm.jpg

那我們明天見囉~~


上一篇
DAY 3 API的開發前準備
下一篇
DAY 5 API之CRUD
系列文
程式翻轉-API學習從無到有(有嗎?)12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言