Bất Đầu Với WebApi Và Dot Net Core

Butter Ngo | 1131 day | 6824


Overview:

  • Web api là gì?
  • Restful là gì?
  • Implement webapi trong .net core
  1. Web Api là gì?

    Giao diện ứng dụng lập trình, nó chứa các phương thức để cho các ứng dụng bên ngoài có thể gọi , tương tác để trao đổi thông tin. (Mobile, IoT......)
  2. Restful là gì?

    REST (Representational State Transfer) đã được chọn sử dụng rộng rãi thay cho Web service dựa trên SOAP và WSDL. Nó là 1 mẫu để giúp chúng ta tạo ra những API http đẹp và thông dụng. Ngoài ra nó còn đưa ra những nguyên tắc ràng buộc hệ giữa server side và client side theo 4 verb GET, POST, PUT, DELETE .       

        Vi Du: Ở đây chúng ta có 1 restful về categories nó tương đương như  CRUD tới database.

                1. api/categories verb Get ==> Thường dùng để lấy hết tất cả dữ liệu về (R).

                2. api/categories/id verb Get ==> Thường dùng để lấy 1 or nhiều dữ liệu về với điều kiện là bằng

                    Id(R).

                3. api/categories verb Post ==> Thường dùng để tạo mới dữ liệu (C).

                4. api/categories/id verb Put ==> Thường dùng để edit dữ liệu (U).

                6. api/categories/id verb DELETE ==> Thường dùng đẻ xóa dữ liệu (D).

      3. Thực hành:

  Đầu tiên các bạn cần  Download source code về .Net Core, MVC6 và Entity Framework mình đã làm ở bài trước Link Tham Khảo.

Sau khi các bạn đã down source về chúng ta mở lên và làm theo các bước sau để tạo ra được 1 restful cho categories.

  1. Đầu Tiên Chúng ta click chuột phải vào project tạo ra 1 folder tên API.

 www.c-sharp.vn

Trong folder api chúng ta click chuột phải chọn Add ==> Controller sau đó chọn api controller empty.

namespace DemoMvc6.Api
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;

    [Route("api/Categories")]
    public class CategoriesController : Controller
    {

    }
}

Sau khi tạo xong chúng ta có được đoạn code như bên trên. Mình giải thích 1 chút về  [Route("api/Categories")] đây là nơi bạn định nghĩa ra cái root perfix cho api nghĩa là chúng ta định nghĩa ra cái link bắt đầu cho 1 API.

 Và bây giờ chúng ta bắt đầu làm công việc CRUD đến database thông qua restful. Đầu tiên thì bạn cần tạo ra 1 Dto (Data Transfer Objects), tại sao chúng ta cần tạo dto vì đây là nơi chúng ta trao đổi object giữa client và server các bạn có thể tìm hiểu (Dto) ở đây.

CategoryDto

namespace DemoMvc6.Dto
{
    public class CategoryDto
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public bool IsActive { get; set; }
    }
}

      1. HTTPGET.

           1.1/ Đầu tiên chúng ra sẽ lấy hết tất cả dữ liều từ table categories lên thông ma HTTPGET bằng đoạn code bên dưới

[HttpGet]//line 1
[Route("")] // line 2
public async Task<IActionResult> Get(int id)
{
    using (var context = new DemoContext())
    {
      return Ok(await context.Categories.Where(x=>x.Id == id).Select(x=>new CategoryDto
                {
                    Id = x.Id,
                    Name = x.Name,
                    IsActive = x.IsActive
                }).FirstOrDefaultAsync());
            }
     }
  •  Line 1: Dòng này chúng ta dùng để add 1 verd cho method.
  •  Line 2: Chúng ta add phần còn lại sau cái root perfix "api/categories".
  •  Line 3: Ở dòng này chúng ta return về 1 HttpResponseMessage .

Ở đây các bạn muốn test api thì mình khuyên nên dùng postman đây là 1 extension của chrome Link.

các bạn có thể coi kết quả của đoạn code bên trên qua hình bên dưới.

www.c-sharp.vn

1.2/ Tiếp theo mình sẽ lấy kết quả của c# với cái id bằng 3 theo chuẩn restful.

[HttpGet]
[Route("{id}")]//line 1
public async Task<IActionResult> Get(int id)
{
    using (var context = new DemoContext())
            {
                return Ok(await context.Categories.Select(x => new CategoryDto
                {
                    Id = x.Id,
                    Name = x.Name,
                    IsActive = x.IsActive
                }).ToListAsync());
            }
}
  • Line 1: Ở đây các bạn thấy dòng code [Route("{id}")] dòng code này là các bạn sẽ định nghĩa ra sau root perfix của các bạn tiếp theo là gì là 1 endpoint hay là 1 parameter nếu các bạn muốn định nghĩa 1 endpoint thì các bạn có thể cấu hình nhu sau [Route("your endpoint")], còn các bạn muốn cầu hình sau cái root perfix là 1 parameter thì các bạn chỉ cần để vô dấu{}. Ở đây mình sẽ làm 2 cái vd mẫu

Ví Dụ:

  •  [Route("search")] ==> api/categories/search
  •  [Route("{id}")] ==> api/categories/3

Và đây là kết quả của đoạn code trên.

www.c-sharp.vn

2. HTTPPOST

[HttpPost]//Line 1
[Route("")]
public async Task<IActionResult> Post([FromBody]CategoryDto model)// line2
{
   using (var context = new DemoContext())
   {
     context.Categories.Add(new Category
     {
        Name = model.Name,
        IsActive = model.IsActive
     });

     return Ok(await context.SaveChangesAsync());
     }
}
  • Line 1: Dòng này chúng ta dùng để add 1 verd cho method.
  • Line 2: [FromBody] ở đây webapi sẽ support ta map 1 json từ body request thành 1 Dto.

 Và đây là 1 ví dụ về HTTPPOST data tới api

www.c-sharp.vn

sau khi các bạn chạy post xong các bạn có thể chạy lại get data như phần 1.1 để kiểm tra lại kết quả.

3. HTTPPUT

[HttpPut]// line 1
[Route("{id}")]// line 2
public async Task<IActionResult> Put(int id, [FromBody]CategoryDto model)
{
   using (var context = new DemoContext())
   {
     var category = await context.Categories.FirstOrDefaultAsync(x => x.Id.Equals(id));

     if (category == null) return NotFound();

     category.Name = model.Name;

     category.IsActive = model.IsActive;

     return Ok(await context.SaveChangesAsync());
  }
}
  • Line 1: Dòng này chúng ta dùng để add 1 verd cho method.
  • Line 2: Như ở trên mình đã giải thích thì dòng này mình cần pass thêm 1 parameter để support cho việt edit data [Route("{id}")].

Và đây là 1 vd cho HTTPPUTdata đến api.

www.c-sharp.vn

sau khi các bạn chạy put xong các bạn có thể chạy lại get data như phần 1.1 để kiểm tra lại kết quả.

4. HTTPDELETE

[HttpDelete]
[Route("{id}")]
public async Task<IActionResult> Delete(int id)
{
   using (var context = new DemoContext())
   {
     var category = await context.Categories.FindAsync(id);

      if (category == null) return NotFound();

      context.Entry(category).State = EntityState.Deleted;

      return Ok(await context.SaveChangesAsync());
   }
}

Và đây là 1 vd cho HTTPDELETE data đến api.

www.c-sharp.vn

Đến đây coi như kết thúc hi vọng bài viết này có thể giúp các bạn. Và đây là source code các bạn có thể download từ đây Link.

Nếu có chỗ nào không hiểu hay cần hỏi gì thì comment bên dưới mình sẽ trả lời cho các bạn


Top Articles

Repository Và Unit Of Work (Entity Framework)

1050 day
ndtung449@gmail.com
Views 4162
Comments 0

Dot Net Core Bearer Token With (JWT) (.Net Core)

1063 day
Butter Ngo
Views 4160
Comments 0

Bắt Đầu Với Dot NET Core (.Net Core)

1143 day
Butter Ngo
Views 3834
Comments 0

Dapper Repository & Unit of Work (.Net)

990 day
Tung Nguyen
Views 2155
Comments 0

Top Question

Bi lỗi Invalid Column Name khi sử dụng LinQ (.Net)

990 day
Bảo Dương
Views 1058
Answers 2

Làm thế nào để lấy information từ token (.Net Core)

380 day
ngovu.dl@gmail.com
Views 604
Answers 1

.NET CORE API JWT (.Net Core)

283 day
huynhminhnhut97@gmail.com
Views 595
Answers 2