Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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));
                }
            }
        }
Ejemplo n.º 3
0
        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);
        }