昨天我們講到了Swagger,這OpenApi幫助我們後端在開發上的用處,並且我們昨天也開了5支 API,但這5支 API 都沒有功能,所以今天就是要來介紹如何使用RESTful API的網路架構風格來達成CRUD的功能
一開始先說甚麼事CRUD,CRUD很值白就是新增 (Create)、刪除 (Delete)、查詢 (Read)和更新 (Update)的意思,在電腦程式語言中是一連串常見的動作行為,而其行為通常是為了針對某個特定資源所作出的舉動(例如:建立資料、讀取資料等)
我們知道RESTful 是一種網路架構風格,它使用 HTTP 請求來訪問和使用數據。該數據可用於 GET、PUT、POST 和 DELETE 等等其他類型,所以我們就可以用RESTful 的特性來達到CRUD的功能
這裡的話我們就拿昨天創好的UserController.cs
的資料來作更改,在哪之前為了讓練習更實際話,我們先創一個Model的資料夾在專案下,並把User.cs
的檔案放進去
格式應該會長這樣
接下來我們就先去改User.cs
的
public class User
{
[Required]
public int Id { get; set; }
[MaxLength(30)]
public string Name { get; set; }
[EmailAddress]
public string Email { get; set; }
[Range(0, 150)]
public int Age { get; set; }
[Phone]
public string? Phone { get; set; }
}
接下來我們現在class 去新增一個以User model的陣列
public static List<User> users = new List<User>();
新增的話我們會遇到Post的方式來新增我們學生的資料
[HttpPost]
public ActionResult Post(User user)
{
if (users == null)
{
return BadRequest();
}
User newUser = new User()
{
Id = user.Id,
Name = user.Name,
Email = user.Email,
Phone = user.Phone,
Age = user.Age,
};
users.Add(newUser);
return Ok("Add Successful");
}
這裡我是用了兩種GET的方式,但其中一是把所有的內容抓出來,另一種是把特定的id抓出來
[HttpGet]
public ActionResult Get()
{
if (users == null)
{
return BadRequest();
}
return Ok(users);
}
[Route("{id}")]
[HttpGet]
public ActionResult<User> Get(int id)
{
if (users == null)
{
return BadRequest();
}
User user = (User)users.FirstOrDefault(u => u.Id == id);
return user;
}
在我有印象的更新方式有兩種一種事PUT另一種事PATCH,這兩個差別就在於PUT 替換(新增或完整更新),PATCH 的話只會部分更新,大多數的人都是採用PUT的方式來作更新
[HttpPut]
public ActionResult Put(User user)
{
if (users == null)
{
return BadRequest();
}
User newUser = users.Where(u => u.Id == user.Id) ==null ? new User(): users.Where(u => u.Id == user.Id).First();
newUser.Name = user.Name;
newUser.Email = user.Email;
newUser.Phone = user.Phone;
newUser.Age = user.Age;
return Ok("Updata Success");
}
刪除的話要先找到指定id的資料然後再透過Remove 的linq 方式作刪除
[HttpDelete]
public ActionResult Delete(int id)
{
if (users == null)
{
return BadRequest();
}
var user = users.FirstOrDefault(u => u.Id == id);
users.Remove(user);
return Ok("Delete Success");
}
那麼沒意外我們今天的CRUD 就先練習到這裡,明天的話我們就會結合之前的DB來作練習,今天就鐵人賽就先到這裡啦~~~
參考資料: