.net core实践系列之短信服务-Sikiro.SMS.Api服务的实现(二)

本文涉及的产品
短信服务,100条 3个月
短信服务,200条 3个月
数字短信套餐包(仅限零售电商行业),100条 12个月
简介: .net core实践系列之短信服务-Sikiro.SMS.Api服务的实现(二)

项目相关开源框架


EasyNetQ


EasyNetQ.DI.Microsoft


Sikiro.Nosql.Mongo


log4net


Mapster


EasyNetQ


这个开源框架是针对RabbitMQ.Client的封装,隐藏了很多实现细节,简化使用方式。并提供了多种IOC注入方式


源码地址:https://github.com/EasyNetQ/EasyNetQ


Sikiro.Nosql.Mongo


这个是我自己针对mongo驱动的常用的基础操作的封装库


源码地址:https://github.com/SkyChenSky/Sikiro.Nosql.Mongo


Mapster


实体映射框架,看评测数据比AutoMapper等之类的效率要高,而且易用性也非常高。

https://github.com/MapsterMapper/Mapster


全局异常日志记录


public class GolbalExceptionAttribute : ExceptionFilterAttribute
    {
        public override void OnException(ExceptionContext context)
        {
            if (!context.ExceptionHandled)
            {
                context.Exception.WriteToFile();
            }
            base.OnException(context);
        }
    }
public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(option =>
                {
                    option.Filters.Add<GolbalExceptionAttribute>();
                })
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }


LoggerHelper


上面的WriteToFile是我对Exception的扩展方法,使用了Log4Net日志框架对异常进行记录,如果有需要也可以写到mongodb或者elasticsearch


/// <summary>
    /// 日志帮助类
    /// </summary>
    public static class LoggerHelper
    {
        private static readonly ILoggerRepository Repository = LogManager.CreateRepository("NETCoreRepository");
        public static readonly ILog Log = LogManager.GetLogger(Repository.Name, typeof(LoggerHelper));
        static LoggerHelper()
        {
            XmlConfigurator.Configure(Repository, new FileInfo("log4net.config"));
        }
        #region 文本日志
        /// <summary>
        /// 文本日志
        /// </summary>
        /// <param name="message"></param>
        /// <param name="ex"></param>
        public static void WriteToFile(this Exception ex, string message = null)
        {
            if (string.IsNullOrEmpty(message))
                message = ex.Message;
            Log.Error(message, ex);
        }
        #endregion
    }


工具库的封装


框架与工具库都是以库的形式提供我们使用,而且都是可复用,但是他们区别在于:工具库开箱即用,大多数以静态方法提供调用,只调用少量甚至一个方法则完成使用。


而框架定义,为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品,而他具有约束性、可复用性、规范性。他是一个半成品,可重写。


因此为了简化框架的使用,对常用设置、构建组合进行封装,以一个扩展类或者帮助类的形式提供,简化使用、增加可读性。


Swagger的使用


Http协议的好处是轻量、跨*台,如此良好的灵活性然而需要接口描述对外暴露。Swagger是一个很好的选择,不需要自己手写文档并提供后台管理界面,还可以测试,简化不少工作。


我选择了NSwag.AspNetCore开源组件,他的使用非常简单。只需要两步:


1.配置Swagger:


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseSwaggerUiWithApiExplorer(settings =>
           {
               settings.GeneratorSettings.DefaultPropertyNameHandling =
                   PropertyNameHandling.CamelCase;
               settings.PostProcess = document =>
               {
                   document.Info.Version = "v1";
                   document.Info.Title = "Sikiro.SMS.API";
                   document.Info.Description = "短信服务API";
                   document.Info.TermsOfService = "None";
               };
           });
            app.UseMvc();
        }


2.设置站点项目



image.png


此设置为了把接口、参数注释显示到Swagger页面

NSwag还有多个版本的UI选择:


  • UseSwaggerReDoc
  • UseSwaggerUi
  • UseSwaggerUi3


访问http://localhost:port/swagger就可以见到API文档了


image.png


部署


因为我公司还是使用windows server 2008。因此部署前应准备环境安装包:


.NET Core 2.1.3 windows-hosting


安装完成后重启服务器,再把文件发布到服务器,编辑应用程序池为无托管代码。就可以访问了


image.png



目录
相关文章
|
1月前
|
缓存 测试技术 API
构建高效后端API:实践与哲学
【9月更文挑战第36天】在数字世界的浪潮中,后端API成为了连接用户、数据和业务逻辑的桥梁。本文将深入探讨如何构建一个既高效又灵活的后端API,从设计理念到实际代码实现,带你一探究竟。我们将通过具体示例,展示如何在保证性能的同时,也不失安全性和可维护性。
|
1月前
|
API
阿里云短信服务文档与实际API不符
阿里云短信服务文档与实际API不符
|
1月前
|
缓存 数据挖掘 API
商品详情API接口的应用实践
本文探讨了商品详情API接口在电商领域的应用实践,介绍了其作为高效数据交互方式的重要性,包括实时获取商品信息、提升用户体验和运营效率。文章详细描述了API接口的特点、应用场景如商品展示、SEO优化、数据分析及跨平台整合,并提出了缓存机制、分页加载、异步加载和错误处理等优化策略,旨在全面提升电商运营效果。
|
1月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
|
16天前
|
Prometheus 监控 Java
深入探索:自制Agent监控API接口耗时实践
在微服务架构中,监控API接口的调用耗时对于性能优化至关重要。通过监控接口耗时,我们可以识别性能瓶颈,优化服务响应速度。本文将分享如何自己动手实现一个Agent来统计API接口的调用耗时,提供一种实用的技术解决方案。
27 3
|
19天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
24天前
|
XML API 网络架构
深入理解RESTful API设计原则与实践
【10月更文挑战第26天】在数字化浪潮中,API(应用程序编程接口)成为连接不同软件组件的桥梁。本文将深入浅出地探讨如何根据REST(Representational State Transfer)原则设计高效、易于维护和扩展的API,同时分享一些实用的代码示例,帮助开发者构建更加健壮和用户友好的服务。
|
1月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
96 9
|
1月前
|
XML JSON API
深入浅出:RESTful API 设计实践与最佳应用
【9月更文挑战第32天】 在数字化时代的浪潮中,RESTful API已成为现代Web服务通信的黄金标准。本文将带您一探究竟,了解如何高效地设计和维护一个清晰、灵活且易于扩展的RESTful API。我们将从基础概念出发,逐步深入到设计原则和最佳实践,最终通过具体案例来展示如何将理论应用于实际开发中。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的指导和灵感。
|
1月前
|
缓存 监控 API
微服务架构下RESTful风格api实践中,我为何抛弃了路由参数 - 用简单设计来提速
本文探讨了 RESTful API 设计中的两种路径方案:动态路径和固定路径。动态路径通过路径参数实现资源的 CRUD 操作,而固定路径则通过查询参数和不同的 HTTP 方法实现相同功能。固定路径设计提高了安全性、路由匹配速度和 API 的可维护性,但也可能增加 URL 长度并降低表达灵活性。通过对比测试,固定路径在性能上表现更优,适合微服务架构下的 API 设计。
下一篇
无影云桌面