iT邦幫忙

1

Angular 取得 API 資料問題

想請教各位大大
因最近在學習Angular有些API串接問題想請教
目前是以ASP.NET Web API與Angular做資料串接
網上看了許多API教學都提到說GET是取得資料
而POST是新增資料
但如果要在GET的時候取得特定資料就表示要在url上面將所有參數帶入嗎?

[RoutePrefix("api/member")]
    public class MemberController : ApiController
    {
        [HttpGet, HttpPost]
        //加入可跨站請求資料網域
        [EnableCors(origins: "http://localhost:8100", headers: "*", methods: "*")]
        [Route("infor")]
        
        //[FromBody] Model.MemberIn oData將前端傳遞過來的Json寫入Model
        public IEnumerable<Model.MemberInfor> Get([FromBody] Model.MemberIn oData)
        {
            var repository = new Repository.MemberInofr();
            var result = repository.GetMemberInfor(oData.AccountID);
            return result;
        }
    }

目前的寫法如上
是用前端POST過來的JSON資料寫在Header裡面
再讀出所需要的資料傳回到前端

想請問這樣用POST的方式做資料讀取會有什麼問題嗎?
為何都要以GET做資料讀取?
有大大可以幫忙解惑一下嗎

2 個回答

1
Hankz
iT邦新手 3 級 ‧ 2021-09-06 09:52:22
最佳解答

GET是取得資料 而POST是新增資料

其實也不是說哪個狀況,就"一定"要用GET或POST(還有PUT、DELETE、PATCH...)
就只是送參數跟接參數的方式不同
還有POST是放在header會比較不會被直接看到
而且網址比較美觀XDD

想請問這樣用POST的方式做資料讀取會有什麼問題嗎?

只要接得到值,回傳格式也對就沒問題

為何都要以GET做資料讀取?

可以說是慣例吧
在把你寫的API給別人介接的時候
指定請求方式(GET、POST、DELETE...)也能夠讓對方比較容易理解這個API在做甚麼,增加可讀性
所以即便是自己寫自己用
也建議照規矩來
養成好習慣沒有壞處

HTTP請求方法DOC

主要也是想說是不是用POST去取得資料可以將參數帶在Header中會不會比較好,所以就一直糾結到底要用POST還是GET
/images/emoticon/emoticon06.gif

Hankz iT邦新手 3 級 ‧ 2021-09-06 11:37:04 檢舉

我自己的方式是
如果參數不多且沒什麼敏感的東西,例如:
頁數、類別、日期等等
那就用GET

可是如果帶的參數比較複雜,或有比較敏感的資料,例如:
一大串的文字(URL有長度限制)、個資等等
就會用POST

這不是絕對,給你參考

了解感謝您
/images/emoticon/emoticon12.gif

2
小魚
iT邦大師 1 級 ‧ 2021-09-06 13:15:39

我的API一律都是POST,
而且還要經過驗證,
就只是為了安全而已.

主要也是希望資料在傳遞上是安全的
想問一下大大在驗證方面是怎麼做
目前的想法是在接API資料前由系統給一個Token當作金鑰
確保前端傳來的Token是可以讀取資料的

Hankz iT邦新手 3 級 ‧ 2021-09-06 16:26:51 檢舉

要考慮到安全性問題
的確是盡量都用POST比較好
要了解怎麼做API
建議直接去看別人怎麼做的最快
Microsoft Graph API為例:

  1. 帶帳號、密碼、Client_ID(需特別申請)取得Token
  2. 之後所有對API的操作都需要帶著Token
  3. Token有效期限1小時,若Token失效(或無效),則回傳401錯誤
  4. Request太頻繁,就會在Header中帶入Retry-After: [等待秒數],告訴使用者過一段時間後再提出Request,在這期間,任何請求都不處理
  5. 可能還需要其他防範DOS、DDOS攻擊的保護措施

另外,Token在驗證時不要透過DB
用驗算的
不然那個Lodding很恐怖

我要發表回答

立即登入回答