Xem thêm

Sự phối hợp giữa Interceptors và Dịch vụ Http trong Angular

Huy Erick
Khi làm việc với AngularJS, việc hiểu về Interceptors và Dịch vụ Http là rất quan trọng để ứng dụng của bạn có thể tương tác với các dịch vụ HTTP một cách hiệu quả...

Khi làm việc với AngularJS, việc hiểu về Interceptors và Dịch vụ Http là rất quan trọng để ứng dụng của bạn có thể tương tác với các dịch vụ HTTP một cách hiệu quả và linh hoạt.

Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về Interceptors và Dịch vụ Http trong AngularJS. Bằng cách sử dụng Interceptors, chúng ta có thể can thiệp vào các yêu cầu HTTP trước khi gửi đi hoặc sau khi nhận được phản hồi từ server, trong khi Dịch vụ Http cung cấp cho chúng ta các phương thức để tương tác với các dịch vụ HTTP. Hiểu rõ về hai thành phần này sẽ giúp cho việc phát triển các ứng dụng AngularJS trở nên dễ dàng và hiệu quả hơn.

Dịch vụ Http trong AngularJS là gì?

Dịch vụ Http là một trong những dịch vụ quan trọng trong AngularJS, cung cấp các phương thức để tương tác với các dịch vụ HTTP như GET, POST, PUT và DELETE. Dịch vụ Http giúp chúng ta gửi các yêu cầu HTTP đến server và nhận phản hồi từ server. Nó được sử dụng để giao tiếp với các API hoặc dịch vụ web, lấy dữ liệu từ server và cập nhật dữ liệu trên server.

Dịch vụ Http cũng cung cấp các tính năng khác như xử lý lỗi, quản lý phiên bản của các yêu cầu và phản hồi, cung cấp cơ chế xác thực và cho phép xử lý các yêu cầu trước khi gửi đi. Điều này giúp cho việc tương tác với các dịch vụ HTTP trở nên dễ dàng và linh hoạt hơn.

Alt text

Dịch vụ Http là một thành phần quan trọng trong việc phát triển ứng dụng web động với AngularJS, cho phép chúng ta tạo các ứng dụng web với các tính năng như lấy dữ liệu từ server, cập nhật dữ liệu, xóa dữ liệu và thực hiện các hoạt động khác trên server.

Các phương thức cơ bản của Dịch vụ Http trong AngularJS

Dịch vụ Http trong AngularJS cung cấp cho chúng ta các phương thức để tương tác với các dịch vụ HTTP như GET, POST, PUT và DELETE. Dưới đây là các phương thức cơ bản của Dịch vụ Http:

  • GET(): Phương thức GET được sử dụng để yêu cầu dữ liệu từ server. Chúng ta có thể truyền tham số trong URL để tìm kiếm dữ liệu mong muốn.

  • POST(): Phương thức POST được sử dụng để gửi dữ liệu đến server để tạo mới hoặc cập nhật các đối tượng trên server.

  • PUT(): Phương thức PUT được sử dụng để cập nhật dữ liệu của một đối tượng đã tồn tại trên server.

  • DELETE(): Phương thức DELETE được sử dụng để xóa một đối tượng từ server.

Ngoài ra, Dịch vụ Http còn hỗ trợ các phương thức khác như PATCH() để cập nhật một phần dữ liệu của một đối tượng trên server, HEAD() để lấy thông tin về các tiêu đề của một tài nguyên và OPTIONS() để lấy thông tin về các phương thức HTTP được hỗ trợ bởi server.

Các phương thức này được sử dụng để gửi các yêu cầu HTTP đến server và nhận phản hồi từ server. Chúng ta có thể sử dụng các phương thức này để tạo các ứng dụng web động với các tính năng như lấy dữ liệu từ server, cập nhật dữ liệu, xóa dữ liệu và thực hiện các hoạt động khác.

Interceptors trong AngularJS là gì?

Alt text

Interceptors là một thành phần trong các kiến trúc phần mềm sử dụng trong lập trình. Nó là một mô hình thiết kế cho phép các hành động được thực hiện trước hoặc sau khi một yêu cầu (request) được xử lý bởi một ứng dụng. Interceptor thường được sử dụng để kiểm soát và thay đổi luồng của các yêu cầu và phản hồi.

Trong các ứng dụng web, interceptor thường được sử dụng để thêm các header, xác thực người dùng, kiểm tra quyền truy cập, kiểm tra tính hợp lệ của dữ liệu và nhiều hơn nữa. Nó có thể được triển khai bằng cách sử dụng các thư viện hoặc framework như Spring Interceptor trong Java hoặc Express.js Middleware trong Node.js.

Các loại Interceptors trong AngularJS

Có 2 loại Interceptors trong AngularJS

  • Request Interceptors: Đây là các interceptor sẽ được gọi trước khi yêu cầu HTTP được gửi đi. Các request interceptor có thể được sử dụng để thêm các header, thông tin xác thực, hoặc thay đổi các thông tin yêu cầu trước khi nó được gửi đi.

  • Response Interceptors: Đây là các interceptor sẽ được gọi sau khi nhận được phản hồi HTTP. Các response interceptor có thể được sử dụng để xử lý và thay đổi dữ liệu phản hồi, hoặc thực hiện các hành động sau khi nhận được phản hồi.

Cả Request Interceptors và Response Interceptors đều được triển khai bằng cách sử dụng các interceptor factories. Ví dụ:

app.factory('myInterceptor', function() {
    return {
        request: function(config) {
            // Thực hiện các thay đổi trên request
            return config;
        },
        response: function(response) {
            // Xử lý và thay đổi dữ liệu phản hồi
            return response;
        }
    };
});

Sau đó, bạn có thể đăng ký các interceptor này với $httpProvider để sử dụng chúng trong toàn bộ ứng dụng:

app.config(function($httpProvider) {
    $httpProvider.interceptors.push('myInterceptor');
});

Sử dụng Interceptors để quản lý HTTP requests trong AngularJS

Dưới đây là một số cách bạn có thể sử dụng Interceptors để quản lý các HTTP requests trong AngularJS:

  • Thêm các header cho request: Bạn có thể sử dụng Interceptors để thêm các header cho request như token xác thực, hoặc các thông tin bổ sung khác. Điều này giúp bạn không phải lặp lại việc thêm header cho từng request riêng lẻ.

  • Xử lý lỗi cho request: Interceptor cũng có thể được sử dụng để xử lý các lỗi trong request và hiển thị các thông báo lỗi phù hợp cho người dùng.

  • Thực hiện các thay đổi trước khi request được gửi: Bạn có thể sử dụng Interceptors để thực hiện các thay đổi trước khi request được gửi, chẳng hạn như thay đổi endpoint hoặc thêm thông tin bổ sung vào request.

Trên đây là một số cách bạn có thể sử dụng Interceptors để quản lý các HTTP requests trong AngularJS. Interceptors rất mạnh mẽ và có nhiều ứng dụng khác nhau, bạn có thể tùy chỉnh và sử dụng chúng để đáp ứng các yêu cầu của ứng dụng của bạn.

Kết hợp Dịch vụ Http và Interceptors trong AngularJS

Sử dụng Interceptors để xử lý các HTTP requests trước khi gửi đi

Sử dụng Interceptors để xử lý các HTTP requests trước khi gửi đi là một trong những tính năng mạnh mẽ và hữu ích nhất của AngularJS. Nó cho phép bạn can thiệp vào quá trình gửi request để thực hiện các thay đổi trước khi request được gửi đi.

Để sử dụng Interceptors để xử lý các HTTP requests trước khi gửi đi, bạn có thể làm theo các bước sau:

Bước 1: Tạo một factory để định nghĩa Interceptor

Trong đó, hàm request sẽ được gọi trước khi request được gửi đi. Bạn có thể thực hiện các thay đổi trên request ở đây và trả về một đối tượng config mới để gửi đi.

app.factory('myInterceptor', function() {
    return {
        request: function(config) {
            // Thực hiện các thay đổi trên request
            return config;
        }
    };
});

Bước 2: Thêm Interceptor vào $httpProvider

Với cấu hình này, mọi request sẽ được xử lý bởi Interceptor bạn đã định nghĩa.

app.config(function($httpProvider) {
    $httpProvider.interceptors.push('myInterceptor');
});

Bước 3: Sử dụng Interceptor để thực hiện các thay đổi trên request

Bạn có thể sử dụng Interceptor để thực hiện các thay đổi trên request trước khi nó được gửi đi, chẳng hạn như thêm các header mới hoặc thay đổi endpoint của request.

app.controller('myController', function($http) {
    $http.get('/api/data')
        .then(function(response) {
            // Xử lý phản hồi từ server
        })
        .catch(function(error) {
            // Xử lý lỗi
        });
});

Trong ví dụ trên, nếu URL của request là "/api/data", Interceptor sẽ thêm một header mới vào request và thay đổi endpoint của request thành "/api/data/latest" trước khi nó được gửi đi.

Sử dụng Interceptors để xử lý các HTTP responses trước khi trả về

Ở trên chúng ta đã tạo một factory để định nghĩa Interceptor, thêm Interceptor vào $httpProvider khi gửi đi rồi thì trả về ta có cách sử dụng Interceptor để thực hiện các thay đổi trên response .Bạn có thể sử dụng Interceptor để thực hiện các thay đổi trên response trước khi nó được trả về cho ứng dụng của bạn, chẳng hạn như thêm các thông tin mới vào response hoặc xử lý lỗi.

Ứng dụng Interceptors và Dịch vụ Http trong AngularJS

Tích hợp Interceptors và Dịch vụ Http vào ứng dụng AngularJS

Để tích hợp Interceptors và Dịch vụ Http vào ứng dụng AngularJS, ta có thể làm theo các bước sau:

Bước 1: Khởi tạo Interceptor

Đầu tiên, ta sẽ khởi tạo Interceptor bằng cách sử dụng provider của AngularJS. Provider cho phép ta đăng ký các service để sử dụng trong ứng dụng. Trong trường hợp này, ta đăng ký một Interceptor để xử lý các yêu cầu HTTP trước khi gửi đi.

app.provider('myInterceptor', function() {
    this.$get = function() {
        return {
            request: function(config) {
                // Thực hiện các thay đổi trên request
                return config;
            }
        };
    };
});

Bước 2: Đăng ký Interceptor

Sau khi đã khởi tạo Interceptor, ta cần đăng ký Interceptor để nó được sử dụng trong ứng dụng. Để đăng ký Interceptor, ta có thể sử dụng phương thức config của module.

app.config(function($httpProvider) {
    $httpProvider.interceptors.push('myInterceptor');
});

Bước 3: Sử dụng Dịch vụ Http

Sau khi đã đăng ký Interceptor, ta có thể sử dụng Dịch vụ Http để thực hiện các yêu cầu HTTP trong ứng dụng. Ví dụ như, ta có thể sử dụng Dịch vụ Http để gửi một yêu cầu GET đến server và nhận phản hồi trả về.

app.controller('myController', function($http) {
    $http.get('/api/data')
        .then(function(response) {
            // Xử lý phản hồi từ server
        })
        .catch(function(error) {
            // Xử lý lỗi
        });
});

Sử dụng Interceptors và Dịch vụ Http để tạo một ứng dụng CRUD

Để tạo một ứng dụng CRUD đơn giản sử dụng Interceptors và Dịch vụ Http trong AngularJS, bạn có thể làm theo các bước sau:

Bước 1: Tạo một Dịch vụ để gửi yêu cầu HTTP

Trong đó, urlBase là đường dẫn cơ sở cho các yêu cầu HTTP, và getData, addData, updateData và deleteData được sử dụng để gửi các yêu cầu HTTP tương ứng.

Bước 2: Tạo một Interceptor để quản lý lỗi HTTP

Bước 3: Thêm Interceptor vào $httpProvider

Bước 4: Tạo một Controller để thao tác với dữ liệu

Trong đó, $scope.data là một mảng để lưu trữ dữ liệu lấy về từ server, và $scope.newData là một đối tượng để lưu trữ dữ liệu mới được thêm vào. addData, updateData và deleteData được sử dụng myService để gửi các yêu cầu HTTP tương ứng để thêm, cập nhật và xóa dữ liệu. Khi xảy ra lỗi HTTP, Interceptor sẽ được sử dụng để xử lý lỗi trước khi trả về cho Controller.

Bước 4: Thêm giao diện người dùng

Ở đây, một danh sách các mục được hiển thị bên trong thẻ ul, và mỗi mục chứa tên và mô tả của dữ liệu. Nút Xóa được sử dụng để xóa mục tương ứng. Bên dưới danh sách, một form được sử dụng để thêm dữ liệu mới với tên và mô tả.

Sử dụng Interceptors và Dịch vụ Http để tạo một ứng dụng đăng nhập và đăng ký

Để tạo một ứng dụng đăng nhập và đăng ký sử dụng Interceptors và Dịch vụ Http trong AngularJS, bạn có thể làm theo các bước sau:

Bước 1: Tạo một dịch vụ để xử lý yêu cầu HTTP

Đầu tiên, bạn cần tạo một dịch vụ để xử lý các yêu cầu HTTP đến server. Trong ví dụ này, chúng ta sẽ sử dụng $http service để gửi các yêu cầu đến server. Dưới đây là ví dụ về dịch vụ $http:

Trong đó, dịch vụ httpService có hai phương thức post() và get() để gửi yêu cầu POST và GET đến server tương ứng.

Bước 2: Tạo một Interceptor để xử lý lỗi HTTP

Tiếp theo, bạn cần tạo một Interceptor để xử lý các lỗi HTTP trước khi chúng được trả về cho Controller. Dưới đây là một ví dụ về Interceptor:

Ở đây, Interceptor có phương thức responseError() để xử lý các lỗi HTTP trả về. Trong ví dụ này, nếu lỗi HTTP là 401, Interceptor sẽ chuyển hướng người dùng đến trang đăng nhập. Nếu lỗi là 403, Interceptor sẽ hiển thị một thông báo lỗi không được ủy quyền, và nếu lỗi là 500, Interceptor sẽ hiển thị một thông báo lỗi server.

Bước 3: Tạo các Controller cho đăng nhập và đăng ký

Tiếp theo, bạn cần tạo hai Controller để quản lý đăng nhập và đăng ký của người dùng. Dưới đây là ví dụ về các Controller này:

Kết bài viết

Trong bài viết này, chúng ta đã tìm hiểu về cách sử dụng Interceptors và Dịch vụ Http để quản lý HTTP requests và responses trong AngularJS. Chúng ta đã tìm hiểu cách sử dụng Interceptors để xử lý các yêu cầu HTTP trước khi gửi đi, xử lý các responses trước khi trả về, và quản lý các lỗi HTTP.

Chúng ta cũng đã thực hành sử dụng Interceptors và Dịch vụ Http để tạo ra hai ứng dụng CRUD đơn giản và đăng nhập và đăng ký. Sử dụng các kỹ thuật này, chúng ta có thể tạo ra các ứng dụng web mạnh mẽ và ổn định với các tính năng quản lý yêu cầu HTTP hiệu quả.

Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về cách sử dụng Interceptors và Dịch vụ Http trong AngularJS và giúp bạn phát triển các ứng dụng web tốt hơn.

1