Ứng dụng ASP.NET Web API

Là một nền tảng dành cho việc xây dựng các dịch vụ (services).Phục vụ việc giao tiếp giữa các thiết bị khác nhau(bởi dữ liệu dạng json, xml),vd: chương trình client server giữa máy tính và thiết bị di động

1/ Xây dựng ứng dụng webapi tên “HelloWebAPI”

alt

2/Add Model

ASP.NET Web API có thể kết xuất model thành JSON, XML hoặc các định dạng khác, và sau đó ghi dữ liệu đã kết xuất vào nội dung của thông điệp HTTP respone. Và trình khác sẽ đọc và chuyển lại thành đối tượng. Phần lớn các trình khác sẽ hiểu được XML và JSON.

namespace HelloWebAPI.Models
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
}
}

3/ Add ApiController

Controller là đối tượng xử lý các HTTP request được gởi lên bởi trình khách. Khi dự án được tạo ra thì đã có sẵn hai controller cho bạn đó là HomeController và ValuesController.

HomeController là một controller truyền thống của ASP.NET MVC, nó có nhiệm vụ trả về các trang HTML khi có yêu cầu, và tất nhiên nó không có mối liên hệ trực tiếp với API Controller. Sự khác biết chính mà bạn thấy đó là các action trên Web API Controller không trả về các views, mà chúng chỉ trả về dữ liệu đơn thuần.

Hãy đổi tên ValuesController thành tên ProductsController. Khi bạn đổi tên Visual Studio sẽ đi tìm những vị trí có tham chiếu đến ValuesController và cập nhật lại để ứng dụng có thể dạy được.

Tiếp theo bạn xóa hết các phương thức trong ProductController và thêm các dòng code sau vào định nghĩa lớp

public IEnumerable<Product> GetAllProducts()
{
    return new List<Product>
    {
        new Product() { Id = 1, Name = "Gizmo 1", Price = 1.99M },
        new Product() { Id = 2, Name = "Gizmo 2", Price = 2.99M },
        new Product() { Id = 3, Name = "Gizmo 3", Price = 3.99M }
    };
}

public Product GetProductById(int id)
{
    if (id < 1 || id > 3)
    {
        throw new HttpResponseException(System.Net.HttpStatusCode.NotFound);
    }
    return new Product() { Id = id, Name = "Gizmo " + id.ToString(), Price = id + 0.99M };
}

Phương thức GetAllProducts lấy về danh sách của các sản phẩm theo kiểu IEnumerable<Product>. Phương thức GetProductById lấy về sản phẩm theo tham số truyền lên là id của sản phẩm. Khi gọi phương thức GetProductById, nếu Id không tồn tại, thì phương thức sẽ trả về lỗi 404.

4/ Có thể dùng JavaScript và jQuery để gọi service hoặc chương trình trên phone để gọi

Ví dụ cách gọi từ javascript

Để lấy danh sách của sản phẩm, chúng ta cần gởi một HTTP GET request đến “api/products”. Bạn có thể sử dụng jQUery để thực hiện việc đó như dưới đây:

<script type="text/javascript">
    $(document).ready(function () {
        // Send an AJAX request
        $.getJSON("api/products/",
        function (data) {
            // On success, 'data' contains a list of products.
            $.each(data, function (key, val) {

                // Format the text to display.
                var str = val.Name + ': $' + val.Price;

                // Add a list item for the product.
                $('<li/>', { html: str })
                .appendTo($('#products'));
            });
        });
    });
</script>

Phương thức getJSON sẽ gởi các AJAX request đến dịch vụ HTTP và nhận được kết quả trả về là một mảng chứa các đối tượng JSON. THam số thứ hai của phương thức getJSON là một phương thức được gọi khi lời gọi đã được đáp trả xong.

Lấy thông tin sản phẩm dựa vào trường ID
Để lấy một sản phẩm dựa vào trường ID, ta cần gởi một request HTTP GET đến “api/products/id” với id chính là mã sản phẩm. Điền đoạn code sau vào mã javascript của Index.cshtml

function find() {
    var id = $('#prodId').val();
    $.getJSON("api/products/" + id,
        function (data) {
            var str = data.Name + ': $' + data.Price;
            $('#product').html(str);
        })
    .fail(
        function (jqXHR, textStatus, err) {
            $('#product').html('Error: ' + err);
        });
}

Một lần nữa chúng ta lại sử dụng phương thức getJSON của jQuery để gởi các AJAX request, nhưng lần này chúng ta sử dụng trường ID để cấu trúc nên đường dẫn (đích) để gởi request, và kết quả nhận về là dữ liệu JSON của một sản phẩm.

5/ Chạy ứng dụng

Khi chạy ứng dụng, bạn sẽ thấy trang home sẽ có dạng như sau:

alt

Khi bạn gõ ID vào hộp thoại, sau đó nhấn search bạn sẽ được kết quả:

alt

Trong trường hợp ID bạn điền vào không tồn tại, bạn sẽ nhận về một lỗi HTTP 404

alt

6/ Hiểu về Routing

Đối với mỗi thông điệp HTTP, ASP.NET Web API sẽ xác định controller nào sẽ nhận request bằng cách tham khảo (routing table).

Khi tạo một dự án Web API, dự án sẽ tạo ra một tuyến mặc định có dạng như sau:

/api/{controller}/{id}

Trong đó {controller} chính là tên của Controller, phương thức HTTP (GET / POST/ PUT /DELETE) chính là tên của phương thức của controller và {id} sẽ là giá trị gởi lên của tham số có tên là id.

HTTP Method URI Action
GET /api/products GetAllProducts()
GET /api/products/5 GetProduct(5)
POST /api/products/ HTTP Status 405
GET /api/users/ HTTP Status 404

Trên đây là ví dụ về một số request mà chúng ta có thể triệu gọi( thiết bị di động, another computer), trong đó request thứ ba sẽ trả về trạng thái HTTP Status 405, nghĩa là phương thức triệu gọi không được chấp nhận (do controller không có cài đặt phương thức POST). Và request thứ tư sẽ trả về HTTP Status 404 (không tìm thấy tài nguyên).

Kết luận
Qua bài hướng dẫn trên đây, bạn đã phần nào nhận thấy hiệu quả và sự đơn giản của ASP.NET Web API khi cài đặt các HTTP services so với việc sử dụng ASP.NET MVC Controller, và thậm chí nó cũng đơn giản hơn hẳn với việc cài đặt các WCF Services. Và như chúng ta đã biết, HTTP services (RESTFUL) là những dịch vụ mang tính tương thích cao nhất, so với các kiểu dịch vụ khác.

Đánh giá của bạn

Add Comment