官方文檔地址:https://docs.abp.io/en/abp/latest/API/Auto-API-Controllers
詳細的請閱讀官方文檔,這邊側重簡化說明怎麼應用和一些注意要點。
自動API,即代碼端只需要定義服務層即可,無需每一個服務層方法都對應在控制器中編寫一個action。
這個可以大大節省我們的時間和省略大量控制器端的代碼。
該示例項目,我們建了一個ApplicationContract 接口層,一個Application 服務層,兩個web項目。
接口層如下:
我們定義了2個接口,分別是獲取姓名和年齡。
using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using Volo.Abp.Application.Services; namespace AbpAPI { public interface IStudentService:IApplicationService { Task<string> GetNameAsync(); Task<int> GetAgeAsync(); } }
服務層實現:
using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; namespace AbpAPI { public class StudentService : ApplicationService, IStudentService { [RemoteService(IsEnabled =false)] //該設置表示該方法不自動生成api,但不影響直接調用。 public async Task<int> GetAgeAsync() { return await Task.FromResult(18); } public async Task<string> GetNameAsync() { return await Task.FromResult("李四"); } } }
下面是web層的注入:
using Microsoft.OpenApi.Models; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Autofac; using Volo.Abp.Modularity; using Volo.Abp.Swashbuckle; namespace AbpAPI.Web { [DependsOn(typeof(AbpAPIApplicationModule))] [DependsOn(typeof(AbpAspNetCoreMvcModule))] [DependsOn(typeof(AbpSwashbuckleModule))] [DependsOn(typeof(AbpAutofacModule))] public class AbpAPIWebModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { base.ConfigureServices(context); //注入自動API Configure<AbpAspNetCoreMvcOptions>(options => { options .ConventionalControllers .Create(typeof(AbpAPIApplicationModule).Assembly); //設置哪個類庫要自動API,可配置多個服務實現層 }); //下面是自動生成swaggerUI var services = context.Services; services.AddAbpSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Title = "動態API", Version = "v1" }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); } ); } public override void OnApplicationInitialization(ApplicationInitializationContext context) { var app = context.GetApplicationBuilder(); //應用swaggerUI app.UseSwagger(); app.UseAbpSwaggerUI(options => { options.SwaggerEndpoint("/swagger/v1/swagger.json", "動態API"); }); base.OnApplicationInitialization(context); } } }
這裏面做了2個配置
若單單配置自動API,只需要
//注入自動API Configure<AbpAspNetCoreMvcOptions>(options => { options .ConventionalControllers .Create(typeof(AbpAPIApplicationModule).Assembly); //設置哪個類庫要自動API,可配置多個服務實現層 });
配置swaggerUI是方便我們查看api內容和模擬請求。
這樣,就完成了自動API的配置。
有個點需要注意看官方文檔的, 就是關於請求方式和url路徑。官方文檔做了詳細說明。在路徑默認固定以 /api/app/開頭,方法名中的Get和async,service都會被清掉。
比如StudentService下的GetName方法,最終請求的url是 /api/app/student/name
下面我們運行起來,看swagger
可以看到,這時候只有getname方法是有生成API,GetAge是沒有的。
至此,自動生成API的應用就這麼簡單。