Tuesday, March 12, 2019

Cách thiết kế Web API ASP.NET Self Host - tự chạy ko cần Web server IIS

Đã là lập trình web thì ta đều biết rằng khi code xong web thì ta phải đưa nó vào 1 web server để nó chạy được.

Khi code web asp.net thì ta chỉ có 1 lựa chọn web server duy nhất là IIS

Nhưng mà công nghệ ngày một phát triển, các lập trình viên đã sáng chế ra một phương thức mà web asp.net giờ đây không phải host trên IIS nữa. Tên của sáng chế đó là OWIN - Open Web Interface for .NET

Theo định nghĩa ngắn gọn của các chuyên gia thì :
OWIN is a open source specification that is not defined by microsoft and is not an actual implementation
OWIN là một đặc tả mã nguồn mở không phải hàng chính hãng Microsoft cơ mà đã được đưa vào thực tế ngon ngẻ rồi nha

Vậy túm lại thì OWIN chỉ là một đặc tả thôi, nó mới là lý thuyết trên giấy. Còn đây mà là hero nè : Katana

Katana là tên một dự án mã nguồn mở xây dựng các tập công cụ theo đặc tả được mô tả trong OWIN. 

Chúng ta sẽ dần dần tìm hiểu các công cụ này bằng một project web api demo nhé

Bước đầu tiên là ta cần install 2 package sau bằng cách gõ lệnh trên Package Manager

PM> Install-Package Microsoft.Owin.SelfHost
PM> Install-Package Microsoft.AspNet.WebApi.OwinSelfHost


Sau đó thì ta tạo 1 class cấu hình với tên là Startup để cấu hình router cho web api như bình thường

using System.Web.Http;
using Owin;

namespace AspNetSelfHostDemo
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Configure Web API for self-host. 
            var config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            app.UseWebApi(config); 
        }
    }
}

Sau đó ta tạo một controller web api như bình thường 

using System.Collections.Generic;
using System.Web.Http;

namespace AspNetSelfHostDemo
{
    public class DemoController : ApiController
    {
        // GET api/demo 
        public IEnumerable<string> Get()
        {
            return new string[] { "Hello", "World" };
        }

        // GET api/demo/5 
        public string Get(int id)
        {
            return "Hello, World!";
        }

        // POST api/demo 
        public void Post([FromBody]string value)
        {
        }

        // PUT api/demo/5 
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/demo/5 
        public void Delete(int id)
        {
        }
    } 
}

Và bước cuối cùng đơn giản không kém đây, ta tạo một class để khởi động (class này gọi ra đặc tả WebApp.Start trong Katana project đó) nhồi vào Start là tên class cấu hình <Startup> với tham số là thông tin host và port tự đặt để chạy chương trình
using System;
using Microsoft.Owin.Hosting;

namespace AspNetSelfHostDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            using (WebApp.Start<Startup>("http://localhost:8080"))
            {
                Console.WriteLine("Web Server is running.");
                Console.WriteLine("Press any key to quit.");
                Console.ReadLine();
            }
        }
    }
}

Thật là đơn giản phải không nào, ta chạy chương trình và bật postman lên thưởng thức thành quả thôi nào
http://localhost:8080/api/demo

Chúc các bạn một ngày nghiên cứu thật vui vẻ

No comments:

Post a Comment

Tuyệt chiêu tránh khỏi sự chậm chạm của Entity Framework

Nhìn chung mà nói, tôi chả lo lắng gì nhiều về câu lệnh LINQ của tôi khi làm việc với Entity Fra...