private async Task <OpenApiDocument> 创建(bool isFull) { var document = new OpenApiDocument(); document.Servers.Add(new OpenApiServer { Url = "https://gw.open.1688.com/" }); System.Collections.Generic.List <Task <eeeeeeeee> > publicApiDetails; if (isFull) { var publicAllApis = await AlibabaDataCache.ListPublicApiByCacheAsync(); var publicApis = publicAllApis.Data.GroupBy(f => new { f.Namespace, f.Name }).Select(f => new Datum { Name = f.Key.Name, Namespace = f.Key.Namespace, Version = f.Max(ff => ff.Version) }).ToArray(); publicApiDetails = publicApis.Select(async f => new eeeeeeeee { ApiInfo = f, ApiDetail = await AlibabaDataCache.GetApiDetailByCacheAsync(f.Namespace, f.Name, f.Version) }) /*.Skip(587).Take(1)*/.ToList(); } else { var apiCategorys = await AlibabaDataCache.GetAllApiCategoryAsync(); var aa = apiCategorys.Result.OrderBy(f => f.AopCategoryName).Select(async f => await AlibabaDataCache.GetAopApiListByCategoryByCacheAsync(f.AopCategoryCode)); publicApiDetails = aa.SelectMany(f => f.Result.Result.Select(async ff => new eeeeeeeee { ApiInfo = new Datum { Name = ff.Name, Namespace = ff.Name, Version = ff.Version }, ApiDetail = await AlibabaDataCache.GetApiDetailByCacheAsync(ff.Namespace, ff.Name, ff.Version) })).ToList(); } var solutionApiAndMessageList = await AlibabaDataCache.GetSolutionApiAndMessageListDetailByCacheAsync(); publicApiDetails.AddRange( solutionApiAndMessageList.Select(async f => new eeeeeeeee { ApiInfo = f, ApiDetail = await AlibabaDataCache.GetApiDetailByCacheAsync(f.Namespace, f.Name, f.Version) }) ); var 另外添加 = new[] { //创建订单前预览数据接口 new Datum { Namespace = "com.alibaba.trade", Name = "alibaba.createOrder.previewWithOBUid", Version = 1 }, ////跨境订单创建 //new Datum { Namespace = "com.alibaba.trade", Name = "alibaba.trade.createCrossOrder", Version = 1 }, ////查询订单可以支持的支付渠道 //new Datum { Namespace = "com.alibaba.trade", Name = "alibaba.trade.payWay.query", Version = 1 }, //批量获取订单的支付链接 //new Datum { Namespace = "com.alibaba.trade", Name = "alibaba.alipay.url.get", Version = 1 }, ////获取使用跨境宝支付的支付链接 //new Datum { Namespace = "com.alibaba.trade", Name = "alibaba.crossBorderPay.url.get", Version = 1 }, ////获取使用诚e赊支付的支付链接 //new Datum { Namespace = "com.alibaba.trade", Name = "alibaba.creditPay.url.get", Version = 1 }, ////跨境场景获取商品详情 //new Datum { Namespace = "com.alibaba.product", Name = "alibaba.cross.productInfo", Version = 1 }, ////跨境场景下将商品加入铺货列表 //new Datum { Namespace = "com.alibaba.product.push", Name = "alibaba.cross.syncProductListPushed", Version = 1 }, ////同步铺货结果 //new Datum { Namespace = "com.alibaba.product.push", Name = "alibaba.product.push.syncPushProductResult", Version = 1 } }; publicApiDetails.AddRange( 另外添加.Select(async f => new eeeeeeeee { ApiInfo = f, ApiDetail = await AlibabaDataCache.GetApiDetailByCacheAsync(f.Namespace, f.Name, f.Version) }) ); //publicApiDetails = publicApiDetails.Skip(15).Take(1).ToArray(); var errorSchema = errorJsonSchemaResponse(); document.Definitions.Add("ErrorResponse", errorSchema); document.Security = new[] { new OpenApiSecurityRequirement() { { "NeddAuth", new[] { "access_token" } } } }; for (int i = 0; i < publicApiDetails.Count; i++) { var publicApi = publicApiDetails[i].Result; Console.WriteLine((i + 1) + "." + publicApi.ApiInfo.Namespace + ":" + publicApi.ApiInfo.Name + "-" + publicApi.ApiInfo.Version); var apiDetail = publicApi.ApiDetail.Result; //var apiArguments = await GetApiArguments(item.Namespace, item.Name, item.Version); if (apiDetail == null) { } var pathKey = $"/openapi/param2/{apiDetail.Version}/{apiDetail.Namespace}/{apiDetail.Name}/{{AppKey}}"; var description = ($" \r\n{apiDetail.DisplayName}\r\n{apiDetail.Description}\r\n\r\n文档: https://open.1688.com/api/apidocdetail.htm?id={apiDetail.OceanApiId} \r\n调试:https://open.1688.com/api/apiTool.htm?ns={apiDetail.Namespace}&n={apiDetail.Name}&v={apiDetail.Version} \r\n ")?.过滤特殊字符(); var openApiOperation = new OpenApiOperation { Summary = description, //Description = item.Description, OperationId = ((isFull ? (apiDetail.Namespace + ".") : "") + apiDetail.Name)?.ToPascalCase(), Tags = { "namespace=" + apiDetail.Namespace, "name=" + apiDetail.Name, "version=" + apiDetail.Version, "oceanApiId=" + apiDetail.OceanApiId, "billFlag=" + apiDetail.BillFlag, "neddAuth=" + apiDetail.NeddAuth }, Responses = { { "400", new OpenApiResponse { Schema = new NJsonSchema.JsonSchema{ AllowAdditionalProperties = false, Reference = errorSchema } } } } }; if (document.Paths.ContainsKey(pathKey)) { } //if (openApiOperation.OperationId == "DaeServiceRevoke4Aboss") //{ //} else { if (apiDetail.NeddAuth == true) { openApiOperation.Security = document.Security; } //foreach (var item in apiDetail.ApiSystemParamVOList) //{ // openApiOperation.RequestBody = new OpenApiRequestBody { Content = { { item.Name, new OpenApiMediaType { Schema = JsonSchema.FromType<string>() } } } }; //} foreach (var item in apiDetail.ApiAppParamVOList.OrderByDescending(f => f.Required)) { openApiOperation.Parameters.Add(new OpenApiParameter { Kind = OpenApiParameterKind.FormData, Name = item.Name, IsRequired = item.Required == true, Default = item.DefaultValue, Description = item.Description?.过滤特殊字符(), Schema = getSchema(document.Definitions, apiDetail.Namespace, apiDetail.Name, apiDetail.Version, item.Name, item.Type, item.Description?.过滤特殊字符()) }); } var apiErrorCodeDescription = ""; if (apiDetail.ApiErrorCodeVOList.Any()) { apiErrorCodeDescription = "返回 ErrorCode 的错误信息\r\n" + string.Join("\r\n", apiDetail.ApiErrorCodeVOList.Select(f => f.Code + "\t- " + f.Desc + (string.IsNullOrWhiteSpace(f.HowToFix) ? "" : ("(" + f.HowToFix + ")")))); } var _apiReturnParamVOList = apiDetail.ApiReturnParamVOList.Where(f => !string.IsNullOrWhiteSpace(f.Name)).ToArray(); if (_apiReturnParamVOList.Length <= 1) { var item = _apiReturnParamVOList.SingleOrDefault(); var openApiResponse = new OpenApiResponse { Description = item?.Description?.过滤特殊字符() + apiErrorCodeDescription, }; if (item != null) { //openApiResponse.Content.Add("application/json", new OpenApiMediaType { Schema = getSchema(document, apiDetail.Namespace, apiDetail.Name, apiDetail.Version, item.Type, item.Description) }); openApiResponse.Schema = getSchemaResponse(document.Definitions, apiDetail, item); } openApiOperation.Responses.Add("200", openApiResponse); } else { var jsonSchema = createJsonSchema(apiDetail.Namespace, apiDetail.Name, apiDetail.Version, _apiReturnParamVOList); jsonSchema.Description = description; var typeName = openApiOperation.OperationId + "Result"; if (!document.Definitions.ContainsKey(typeName)) { document.Definitions.Add(typeName, jsonSchema); } else { document.Definitions.Add(apiDetail.Namespace?.ToPascalCase() + typeName, jsonSchema); //var dfsdfsd = document.Definitions[jjjjj]; } var openApiResponse = new OpenApiResponse { Description = apiErrorCodeDescription, Schema = new NJsonSchema.JsonSchema { AllowAdditionalProperties = false, Reference = jsonSchema } }; //openApiResponse.Content.Add("application/json", new OpenApiMediaType { Schema = new NJsonSchema.JsonSchema { AllowAdditionalProperties = false, Reference = jsonSchema } }); openApiOperation.Responses.Add("200", openApiResponse); } foreach (var item2 in apiDetail.ApiDocSampleVOList) { } document.Paths.Add(pathKey, new OpenApiPathItem { { OpenApiOperationMethod.Post, openApiOperation } }); } } return(document); }
private NJsonSchema.JsonSchema getMessageTypeToSchema(System.Collections.Generic.IDictionary <string, JsonSchema> definitions, string @namespace, string apiname, int version, string type, string description) { if (type?.StartsWith("message:") != true) { return(null); } var typeName = type.Replace("message:", ""); var _type = 获取数组维度(typeName); var key = @namespace + apiname + _type.type; if (keyValuePairstModelInfo.ContainsKey(key)) { return(makeArraySchemaType(new NJsonSchema.JsonSchema { AllowAdditionalProperties = false, Reference = keyValuePairstModelInfo[key] }, _type.arrLength)); } else { var modelInfo = AlibabaDataCache.GetModelInfoByCacheAsync(@namespace, apiname, version, _type.type).GetAwaiter().GetResult(); var modelInfoResult = modelInfo.Result; var md5key = modelInfoResult == null ? null : string.Join("", modelInfoResult?.Select(f => f.Name + f.Type)); if (!string.IsNullOrWhiteSpace(md5key) && keyValuePairstModelInfo.ContainsKey(md5key)) { return(makeArraySchemaType(new NJsonSchema.JsonSchema { AllowAdditionalProperties = false, Reference = keyValuePairstModelInfo[md5key] }, _type.arrLength)); } else { var jsonSchema = new NJsonSchema.JsonSchema { AllowAdditionalProperties = false, Type = NJsonSchema.JsonObjectType.Object }; keyValuePairstModelInfo.Add(key, jsonSchema); if (!string.IsNullOrWhiteSpace(md5key)) { keyValuePairstModelInfo.Add(md5key, jsonSchema); } createJsonSchema(jsonSchema, @namespace, apiname, version, modelInfoResult); jsonSchema.Description = (string.IsNullOrWhiteSpace(description) ? "" : description + "\r\n") + $"{modelInfo.ErrMsg}\r\n namespace:{@namespace},apiname:{apiname},version:{version},typeName:{_type.type}"; if (definitions != null) { var _typeName = _type.type?.ToPascalCase(); if (!definitions.ContainsKey(_typeName)) { definitions.Add(_typeName, jsonSchema); } else { definitions.Add((@namespace + "." + apiname)?.ToPascalCase() + _typeName, jsonSchema); //var dfsdfsd = document.Definitions[_typeName]; } } return(makeArraySchemaType(new NJsonSchema.JsonSchema { AllowAdditionalProperties = false, Reference = jsonSchema }, _type.arrLength)); } } }
private async Task <OpenApiDocument> 创建(bool isFull) { var document = new OpenApiDocument(); Task <eeeeeeeee11>[] publicApiDetails; if (isFull) { var publicAllApis = await AlibabaDataCache.GetAllTopics(); publicApiDetails = publicAllApis.Result.Select(async f => new eeeeeeeee11 { ApiInfo = f, ApiDetail = await AlibabaDataCache.GetTopic(f.TopicId) }).ToArray(); } else { var apiCategorys = await AlibabaDataCache.GetTopicGroups(); var aa = apiCategorys.Result.Select(async f => await AlibabaDataCache.GetTopicsByGroupAndOwner(f.Id)); publicApiDetails = aa.SelectMany(f => f.Result.Result.Select(async ff => new eeeeeeeee11 { ApiInfo = ff, ApiDetail = await AlibabaDataCache.GetTopic(ff.TopicId) })).ToArray(); } for (int i = 0; i < publicApiDetails.Length; i++) { var publicApi = publicApiDetails[i].Result; Console.WriteLine((i + 1) + "." + publicApi.ApiInfo.TopicGroupDisplayName + ":" + publicApi.ApiInfo.TopicDisplayName); var apiDetail = publicApi.ApiDetail.Result; document.Definitions.Add(apiDetail.TopicId, getMessageTypeToSchema(apiDetail)); } var rr = NJsonSchema.JsonSchema.FromType <string>().ToJsonSchemaProperty(); rr.Title = "TypeDescription的json"; rr.IsReadOnly = true; rr.Default = Newtonsoft.Json.JsonConvert.SerializeObject(publicApiDetails.ToDictionary(f => f.Result.ApiInfo.TopicId, f => f.Result.ApiInfo.TopicGroupDisplayName + "-" + f.Result.ApiInfo.TopicDisplayName)); //var rr1 = NJsonSchema.JsonSchema.FromType<string>().ToJsonSchemaProperty(); //rr1.Title = "TypeDescription的json"; //rr1.IsReadOnly = true; //rr1.Default = Newtonsoft.Json.JsonConvert.SerializeObject(document.Definitions.ToDictionary(f => f.Key, f => f.Value.Id)); var TypeDescriptionEnum = new NJsonSchema.JsonSchema { Type = JsonObjectType.String, Description = "消息类型" }; document.Definitions.Add("TypeDescription", TypeDescriptionEnum); foreach (var item in publicApiDetails) { TypeDescriptionEnum.Enumeration.Add(item.Result.ApiInfo.TopicId); TypeDescriptionEnum.EnumerationNames.Add(item.Result.ApiInfo.TopicId); } var TypeDescriptionJson = new NJsonSchema.JsonSchema { Type = JsonObjectType.Object, AllowAdditionalProperties = false }; document.Definitions.Add("TypeDescriptionJson", TypeDescriptionJson); TypeDescriptionJson.Properties.Add("JsonDescription", rr); //TypeDescriptionJson.Properties.Add("JsonClass", rr1); return(document); }