Chuyển đến nội dung chính

Bài đăng

Đang hiển thị bài đăng từ Tháng 12, 2023

ARM Template

ARM là gì? Azure Resource Manager (ARM) là một dịch vụ quản lý tài nguyên của Microsoft Azure. Nó là một framework cho phép bạn triển khai và quản lý tài nguyên trong môi trường Azure. ARM cung cấp một cách thức đơn giản và linh hoạt để triển khai và quản lý các tài nguyên của bạn trong Azure, từ máy ảo và dịch vụ lưu trữ đến các tài nguyên mạng và các thành phần khác. Declarative Programming là gì? Declarative programming là mô hình lập trình trong đó lập trình viên chỉ định kết quả mong muốn, thay vì chỉ định các bước cụ thể để đạt được kết quả đó. Mô hình này thường được sử dụng để viết các chương trình có logic đơn giản, hoặc các chương trình cần được tối ưu hóa về hiệu suất. Ví dụ: Với cách viết code thông thường (Imperative programming) let array = [1, 2, 3, 4, 5, 6] var reduced = 0 var filtered = [] for element in array { reduced += element if element % 2 == 1 { filtered.append(element) } } Viết theo kiểu Declarative Progrmming let array = [1, 2, 3, 4, 5, 6] let numb

Azure Functions: Blob Index tag và metadata

Trong bài viết này, chúng ta sẽ đi qua các khái niệm về container, blobName, metadata và blob index. Từ đó chúng ta sẽ dễ dàng quản lý file trên container Container Container là một thư mục ảo để chứa các blob. Mỗi container phải có một tên duy nhất trong storage account BlobName BlobName là tên của một blob. BlobName phải là duy nhất trong container. Ví dụ khi bạn mở Properties của 1 blob file trên Azure Overview Blob: TEMP/026a9132-16a3-4f14-9186-bfcb0eff4d3e URL: https://abc-xyz.blob.core.windows.net/abc/TEMP/026a9132-16a3-4f14-9186-bfcb0eff4d3e ... Metadata Key Value ... Blob index tags Key Value ... Trong đó: container: abc blobName: TEMP/026a9132-16a3-4f14-9186-bfcb0eff4d3e Chúng ta triển khai hàm upload file như sau: //... var blobServiceClient = new BlobServiceClient(connectionString); _blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName); //... public BlobClient Upload(byte[] data, string blobName, string containerName) { var binaryData

Interceptor trong ASP.NET MVC

Interceptor là một trong những khái niệm quan trọng trong lập trình, cho phép chúng ta mở rộng và thay đổi hành vi của các phương thức mà không phải sửa đổi code nguồn gốc. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng Interceptor trong Autofac, một container dependency injection phổ biến trong cộng đồng .NET. Mình minh họa bằng .NET Framework, các bạn dựa theo đó làm cho ví dụ .NET nha Giới thiệu về Interceptor Interceptor là một cơ chế cho phép chúng ta "giữ lại" việc gọi một phương thức và thực hiện các hành động nào đó trước và sau khi phương thức đó được gọi. Điều này thường được sử dụng để thêm logic chung, theo dõi, đo lường hoặc thậm chí thay đổi hành vi của các phương thức. Cài đặt Tạo Project ASP.NET MVC. Sau đó, cài đặt các package sau: Install-Package Autofac.Extensions.DependencyInjection Install-Package Autofac.Mvc5 Autofac.Extras.DynamicProxy Bạn cần có service và 1 interceptor để gắn vào service đó. Thêm IMessageService và MessageService public inte

RFC 7807

Giới thiệu Giả sử bạn có nhiều API xử lý data trong một ứng dụng. Khi 1 API xảy ra lỗi, nó sẽ trả về error code Có thể trả theo cách này { "isSuccess": "true", "errorDetai": "An internal server error occurred." } Hoặc cách này { "isSuccess": "true", "error": { "errorDetai": "An internal server error occurred.", "errorCode": "401" } } Và còn rất nhiều cách khác nữa Rất may là chúng ta có RFC 7807. RFC 7807 là một tiêu chuẩn Internet xác định một "problem detail" là một cách để mang theo các chi tiết lỗi có thể đọc được bằng máy trong phản hồi HTTP để tránh cần định nghĩa các định dạng phản hồi lỗi mới cho API HTTP. Trước RFC 7807, các API HTTP thường sử dụng các định dạng phản hồi lỗi riêng lẻ. Điều này có thể gây khó khăn cho các API trong việc xử lý các lỗi, vì các API này cần phải hiểu định dạng lỗi cụ thể của mỗi API. HTTP Code error HTTP code error