• WebAPI实例--第一个API


    今天终于做了第一个任务,学习API之后的第一个实例。销售设置开发API。

    第一、层次结构

    1.API各层

    项目结构主要有五层,分别为API、BizModel、Data、DBModel、Logic。

    2.各层作用

    首先对于微服务架构来说,前后端分离,后端提供数据支撑,前端UI通过API获取数据。

    API为controller接收参数,controller层不做任何逻辑处理,只是通过Model接收参数,调用Logic进行逻辑处理。

    BizModel为对应前端UI的实体数据模型。我们都知道DBModel是对应数据库字段的实体数据模型,而BizModel对应UI控件。例如:一个User,包含ID、username、password、email等字段,而前端可能控件不只是对应填写User的字段,可能填写此User的同学、家人的信息,则DBModel就无法对应。所以BizModel为前端传递数据,可以对应多个DBModel中的字段。BizModel通过Logic分成DBModel再进行SQL动作。

    Data层进行数据库读写动作。

    DBModel为实体数据模型。

    Logic为逻辑层,对BizModel分离为DBModel,调用Data层执行读写动作。

    第二、API构建

    1.对应数据表字段构建DBModel

    查看需要进行操作的数据表,对应字段写入

    public class PreferenceModel
        {
            public Guid AdminUserKey { get; set; }
            public string MsCCode { get; set; }
            public int ShippingAddressSource { get; set; }
            public bool Audit1 { get; set; }
            public bool Audit2 { get; set; }
            public int AutoFeedBack { get; set; }
            public int eBayMsgSHowlines { get; set; }
            public bool DirectSalesAudit1 { get; set; }
            public bool DirectSalesAudit2 { get; set; }
            public bool NewTemplate { get; set; }
        }
    

    2.对应UI传参构建BizModel

    public class PreferenceEntity
        {
            public Guid AdminUserKey { get; set; }
            public string MsCCode { get; set; }
            public int? ShippingAddressSource { get; set; }
            public bool? Audit1 { get; set; }
            public bool? Audit2 { get; set; }
            public int? AutoFeedBack { get; set; }
            public int? eBayMsgSHowlines { get; set; }
            public bool? DirectSalesAudit1 { get; set; }
            public bool? DirectSalesAudit2 { get; set; }
            public bool? NewTemplate { get; set; }
        }
    

    3.Data层数据库读写方法

    在此不做详细展示,自行处理即可。

    4.Logic层处理逻辑,并调用Data层方法进行动作

    这里讲一下更新的逻辑,在项目中销售设置分为两个页面,三个更新动作,对应同一个数据表。所以逻辑不是很复杂,但是想要更新不同数据,又不影响其他数据,只用一个API,就要进行一定处理。

    原本我的想法是Data层三个方法分别进行更新,在Logic层进行区分,这种方法不是不可以,但是本着精简易维护的原则,只使用一个方法更新,逻辑层进行处理。所以思路是controller接收参数调用Logic,将参数通过Entity传递给Logic,然后在Logic判断如果某一字段的参数并未传递新值,则使用原数据值进行更新。思路正确,下一步实施。

    遇到问题int、bool类型字段不能判断非空,所以不知道int型默认的0和bool型默认的false是不是传递过来的值。

    解决方法:在BizModel将bool和int定义为bool?和int?,使用隐形,就可以判断变量是否为空,如果不为空,再将参数强制转换,进行数据更新。

    5.Controller定义

    API只有GET、PUT、POST、DELETE方法,为了规范,Controller命名必须规范。Controller接收参数,调用Logic返回数据。

    至此,API的主要构建已完成,接下来Build查看是否有错误,无错误试运行,进入Swagger测试。

    测试成功后发布,发布完成使用Postman进行测试。

  • 相关阅读:
    Nginx日志管理
    Nginx负载均衡
    Nginx 缓存
    Nginx代理服务器
    Nginx搭建 Web服务
    Nginx HTTP模块
    洛谷P1012拼数
    洛谷 P1876 开灯
    洛谷P2084 进制转化
    关于typedef的用法
  • 原文地址:https://www.cnblogs.com/luffyyang/p/8932471.html
Copyright © 2020-2023  润新知