সুতরাং আমার মনে হয় আমারও একই সমস্যা রয়েছে। আমি ইনট -> স্ট্রিং ম্যাপিংয়ের সাথে এনামগুলি তৈরি করতে সোয়াগার খুঁজছি। এপিআই অবশ্যই অন্তর্ভুক্ত গ্রহণ করতে হবে। সোয়াগার-ইউআই কম গুরুত্ব দেয়, আমি যা চাই তা হল অন্যদিকে "রিয়েল" এনাম সহ কোড জেনারেশন (এই ক্ষেত্রে retrofit ব্যবহার করে অ্যান্ড্রয়েড অ্যাপ্লিকেশন)।
সুতরাং আমার গবেষণা থেকে শেষ পর্যন্ত এটিকে ওপেনপিআই স্পেসিফিকেশনের সীমা হিসাবে মনে হয় যা সোয়াগার ব্যবহার করে। এনামগুলির জন্য নাম এবং সংখ্যা নির্দিষ্ট করা সম্ভব নয়।
আমি যে সেরা ইস্যুটি অনুসরণ করতে পেরেছি তা হ'ল https://github.com/OAI/OpenAPI-Specifications/issues/681 যা "সম্ভবত শীঘ্রই" মনে হচ্ছে তবে স্ব্যাগার আপডেট হতে হবে, এবং আমার ক্ষেত্রে Swashbuckle হিসাবে আমরা হব.
আপাতত আমার কাজটি হ'ল একটি ডকুমেন্ট ফিল্টার প্রয়োগ করা হয়েছে যা এনামগুলির জন্য অনুসন্ধান করে এবং এনামের বিষয়বস্তু সহ প্রাসঙ্গিক বিবরণকে জনপ্রিয় করে তোলে।
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.DocumentFilter<SwaggerAddEnumDescriptions>();
SwaggerAddEnumDesifications.cs:
using System;
using System.Web.Http.Description;
using Swashbuckle.Swagger;
using System.Collections.Generic;
public class SwaggerAddEnumDescriptions : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
foreach (KeyValuePair<string, Schema> schemaDictionaryItem in swaggerDoc.definitions)
{
Schema schema = schemaDictionaryItem.Value;
foreach (KeyValuePair<string, Schema> propertyDictionaryItem in schema.properties)
{
Schema property = propertyDictionaryItem.Value;
IList<object> propertyEnums = property.@enum;
if (propertyEnums != null && propertyEnums.Count > 0)
{
property.description += DescribeEnum(propertyEnums);
}
}
}
if (swaggerDoc.paths.Count > 0)
{
foreach (PathItem pathItem in swaggerDoc.paths.Values)
{
DescribeEnumParameters(pathItem.parameters);
List<Operation> possibleParameterisedOperations = new List<Operation> { pathItem.get, pathItem.post, pathItem.put };
possibleParameterisedOperations.FindAll(x => x != null).ForEach(x => DescribeEnumParameters(x.parameters));
}
}
}
private void DescribeEnumParameters(IList<Parameter> parameters)
{
if (parameters != null)
{
foreach (Parameter param in parameters)
{
IList<object> paramEnums = param.@enum;
if (paramEnums != null && paramEnums.Count > 0)
{
param.description += DescribeEnum(paramEnums);
}
}
}
}
private string DescribeEnum(IList<object> enums)
{
List<string> enumDescriptions = new List<string>();
foreach (object enumOption in enums)
{
enumDescriptions.Add(string.Format("{0} = {1}", (int)enumOption, Enum.GetName(enumOption.GetType(), enumOption)));
}
return string.Join(", ", enumDescriptions.ToArray());
}
}
এটি আপনার স্ব্যাগার-ইউআইতে নিম্নলিখিতগুলির মতো কিছুতে ফলাফল দেয় যাতে অন্তত আপনি "আপনি কী করছেন তা" দেখতে পারেন: