受欢迎的博客标签


1.约定请求参数的传递格式

1.1 前台有几种参数的传递格式,前台和后台需进行约定

1.2 后台设置接受参数的格式,否则路由匹配不到会发生404错误。


2.约定返回内容的数据格式
json
xml
text

3.约定返回内容字段名称的格式
3.1 大小写转换

4.约定请求的合法性

cqrs

5.约定api的版本号

RestFul WebApi 数据交换说明  

(一)服务器端返回的数据格式要指定

        客户端和服务器端的数据交换格式需要某种约定 响应提要设置为返回json格式的数据

(二)字段信息大小写格式约定 驼峰命名法

(三)传输协议约定 messagepack

(四)加密格式约定     

  一、创建Web ApI

(一)配置端口号

x:\x\x.WebApi\Properties\launchSettings.json

"applicationUrl": "http://localhost:7001/"

(二)配置 控制台显示信息

x:\x.WebApi\appsettings.json

{

"Logging":

{

"IncludeScopes": false,

"Debug":

{

"LogLevel":

{

"Default": "Information"

}

},

"Console":

{

"LogLevel":

{

"Default": "Information"

}

}

}

}

(三)配置同源策略

1.在startup.cs 配置两种同源策略

public void ConfigureServices(IServiceCollection services)

{

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); //配置跨域处理,添加 CORS 策略: services.AddCors(options => {

options.AddPolicy("any",

builder => {

builder.AllowAnyOrigin() //允许任何来源的主机访问 .AllowAnyMethod() .AllowAnyHeader(); // .AllowCredentials();//指定处理cookie }); options.AddPolicy("AllowSameDomain", builder => { builder.WithOrigins(

"http://www.iaspnetcore.com",

"https://q.iaspnetcore.com",

"https://zzk.iaspnetcore.com",

"https://job.iaspnetcore.com" )

.AllowAnyMethod()

.AllowAnyHeader();

// .AllowCredentials();

//指定处理cookie

});

});

2.在控制器中启用其中一种同源策略

namespace x.WebApi.v1.Controllers

{

///

/// 获取信息 ///

[Route("v1/[controller]")]

[EnableCors("any")]

public class GetStockInfoController : Controller

{

....

}

二、带版本号的Web Api

三、生成Web Api文档

四、Web Api 授权

五、web Api 优化

 符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:

直观简短的资源地址:URI,比如:http://example.com/resources/。

传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAML等。
对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。   
PUT和DELETE方法是幂等方法。GET方法是安全方法(不会对服务器端有修改,因此当然也是幂等的)。 
不像基于SOAP的Web服务,RESTful Web服务并没有“正式”的标准。这是因为REST是一种架构,而SOAP只是一个协议。
虽然REST不是一个标准,但大部分RESTful Web服务实现会使用HTTP、URI、JSON和XML等各种标准。 .

第一章 项目结构设计

1.1.1.1 ASP.NET Core Web API Actual combat series(2)-ASP.NET Core Web API Project Structure

 

 

第二章 客户端和RestFul WebApi 服务器的数据交换说明  

2.1.约定客户端请求参数的传递格式

2.1.1 前台有几种参数的传递格式,前台和后台需进行约定

2.1.2 后台设置接受参数的格式,否则路由匹配不到会发生404错误。

 

2.2.服务器端返回的数据格式要指定

客户端和服务器端的数据交换格式需要某种约定 响应提要设置为返回json格式的数据

json

xml

text

post请求有3种方式,由请求头中的content-type决定,属于哪一种post请求

application/x-www-form-urlencoded: 普通http请求方式,参数是普通的url参数拼接
application/json: JSON请求方式,参数是json格式
multipart/form-data: 文件上传

2.3.字段信息大小写格式约定 驼峰命名法

2.3.1 大小写转换

2.4 传输协议约定 messagepack

 

2.5 加密格式约定 

 

2.6.约定统一返回的数据格式

 

4.1微信数据的返回格式

参考:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseCollectionGet.html的返回格式

4.1.1 单个数据对象的返回格式

{
    "errcode": 0,
    "errmsg": "ok",
    "matched": 1,
    "modified": 1,
    "id": ""
}
4.1.2 数据列表的返回格式
{
  "errcode": 0,
  "errmsg": "ok",
  "collections": [
      {
          "name": "geo",
          "count": 13,
          "size": 2469,
          "index_count": 1,
          "index_size": 36864
      },
      {
          "name": "test_collection",
          "count": 1,
          "size": 67,
          "index_count": 1,
          "index_size": 16384
      }
  ],
  "pager": {
      "Offset": 0,
      "Limit": 10,
      "Total": 2
  }
}

4.2  Aspose.Cloud数据的返回格式

4.2.1 

AsposeCloudApi/src/Aspose.Cloud.Models/Common/ApiResponse.cs

using System;
using System.Collections.Generic;
using System.Text;

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;

namespace Aspose.Cloud.Models.Common
{
    public class ApiResponse
    {
        public int StatusCode { get; }

        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public string Message { get; }

        public ApiResponse(int statusCode, string message = null)
        {
            StatusCode = statusCode;
            Message = message ?? GetDefaultMessageForStatusCode(statusCode);
        }

        private static string GetDefaultMessageForStatusCode(int statusCode)
        {
            switch (statusCode)
            {
           
            case 404:
                return "Resource not found";
            case 500:
                return "An unhandled error occurred";
            default:
                return null;
        }
    }
}
}

4.2.2

using System;
using System.Collections.Generic;
using System.Text;

namespace Aspose.Cloud.Models.Common
{
    public class ApiOkResponse : ApiResponse
    {
        public int Total { get; set; }
        public object ExtraData { get; set; }
        public object Result { get; }



        public ApiOkResponse(object result)
            : base(200)
        {
            Result = result;
        }
    }
}

4.2.3 call

//对result 赋值
            ApiOkResponse apiOkResponse = new ApiOkResponse(model);
            //result 记录数
            apiOkResponse.Total = model.Articles.Count;

            return Ok(apiOkResponse);

4.3 custom

using System;
using System.Collections.Generic;
using System.Text;

namespace Stockso.Models
{
    public class ApiResponse<T>
    {
        public ApiResponse()
        {
            Items = new List<T>();
           
        }

        private int  status;  // 业务自定义状态码
        private String error;

        public int TotalCount { set; get; }  //总共多少数据
        public int TotalPage { set; get; }  //总共多少页
        public int CurrentPage { set; get; }  //当前是第几页
        public int PageSize { set; get; }  //每页多少数据



        public IList<T> Items { get; set; }

        public string ExtraData { get; set; }

        public string ErrorMessage { get; set; } //错误信息



    }
}

4.3.2 call

/// <summary>
        /// 盘口查询服务-多菜单
        /// </summary>
        public virtual Task<ApiResponse<SearchResultStockModel>> GetStockInfo(StockReportSearchModel model)
        {

#if DEBUG
            _logger.LogInformation($"Executed StockDataPhysicalDiskReportSearchService action {model.DayNum.ToString()}天数-{model.SelectedMenuId.ToString()}菜单项目");
#endif

            //准备存储信息
            List<SearchResultStockModel> searchResultStockModelList = new List<SearchResultStockModel>();

            switch (model.SelectedMenuId)
            {

                case (int)PanKouDataMenu.ktypeBigSell:
                    #region 大单压盘
                    {
                        //PRPDataProvider pRPDataProvider = new PRPDataProvider();
                        //Stockso.DataAnalysis.PanKou.SelectBigSellReport selectBigSellReport = new DataAnalysis.PanKou.SelectBigSellReport();

                        searchResultStockModelList= this._reportService.ReportTailLargeVolume(model.SelectedMenuId).Result;
                    }

                    break;
                    #endregion
            }

            PRPDataProvider pRPDataProvider = new PRPDataProvider();           
            pRPDataProvider.Close();

            Stockso.Models.ApiResponse<SearchResultStockModel> searchResult = new Stockso.Models.ApiResponse<SearchResultStockModel>();
            searchResult.Items = searchResultStockModelList;
            searchResult.ExtraData = "";

            return Task.FromResult(searchResult);     

        }

5.约定api的版本号

 

 

第三章 Web Api 授权

4.约定请求的合法性

cqrs

  

  一、创建Web ApI

(一)配置端口号

x:\x\x.WebApi\Properties\launchSettings.json

"applicationUrl": "http://localhost:7001/"

(二)配置 控制台显示信息

x:\x.WebApi\appsettings.json

{
  //"Logging": {
  //  "LogLevel": {
  //    "Default": "Debug",
  //    "Microsoft": "Warning",
  //    "Microsoft.Hosting.Lifetime": "Information"
  //  }
  //},
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Information"
      }
    },

    "Console": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  },

  "AllowedHosts": "*"
}

(三)配置同源策略

1.在startup.cs 配置两种同源策略

public void ConfigureServices(IServiceCollection services)

{

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); //配置跨域处理,添加 CORS 策略: services.AddCors(options => {

options.AddPolicy("any",

builder => {

builder.AllowAnyOrigin() //允许任何来源的主机访问 .AllowAnyMethod() .AllowAnyHeader(); // .AllowCredentials();//指定处理cookie }); options.AddPolicy("AllowSameDomain", builder => { builder.WithOrigins(

"http://www.iaspnetcore.com",

"https://q.iaspnetcore.com",

"https://zzk.iaspnetcore.com",

"https://job.iaspnetcore.com" )

.AllowAnyMethod()

.AllowAnyHeader();

// .AllowCredentials();

//指定处理cookie

});

});

2.在控制器中启用其中一种同源策略

namespace x.WebApi.v1.Controllers

{

///

/// 获取信息 ///

[Route("v1/[controller]")]

[EnableCors("any")]

public class GetStockInfoController : Controller

{

....

}

二、带版本号的Web Api

三、生成Web Api文档

四、Web Api 授权

五、web Api 优化

使用 aspnet.mvc.core     符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:

直观简短的资源地址:URI,比如:http://example.com/resources/。

传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAML等。对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。   PUT和DELETE方法是幂等方法。GET方法是安全方法(不会对服务器端有修改,因此当然也是幂等的)。 不像基于SOAP的Web服务,RESTful Web服务并没有“正式”的标准。这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但大部分RESTful Web服务实现会使用HTTP、URI、JSON和XML等各种标准。 .

 

blazor+web api

1.定义控制器路由

  /// </summary>
    [Route("v1/[controller]")]
    [ApiController]
   // [EnableCors("any")]
    public class GetStockCwDataController : BaseAPIController
    {

2.定义控制中方法路由

 /// <returns></returns>
        [HttpGet("GetCwDataInfo")]
        public IEnumerable<BaseData> Get()
        {

3.客户端调用

v1/控制器名称/方法路由名称

@code {
    Stockso.Core.Domain.Stocks.BaseData[] forecasts;

    protected override async Task OnInitializedAsync()
    {
        forecasts = await Http.GetJsonAsync<Stockso.Core.Domain.Stocks.BaseData[]>(GlobalHelper.BaseUrl + "/v1/GetStockCwData/GetCwDataInfo");