Skip to content

vipwan/Biwen.QuickApi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Biwen.QuickApi

Nuget Nuget GitHub license PRs Welcome

项目介绍

临时文档地址
Biwen.QuickApi 2+,是一个微型aspnetcore开发框架,提供minimalapi的QuickApi封装,提供IQuickEndpoint书写minimalapi, 模块化支持Modular,多租户,发布订阅:IEvent,作业调度:IScheduleTask,审计:Auditing,缓存,LocalLock,OpenApi ~~

实际应用与示例项目

提供MySurvey问卷调查示例项目

点击访问示例项目:MySurvey - 一个基于 Biwen.QuickApi 构建的完整问卷调查系统,展示了框架在实际业务场景中的应用。

提供 Headless CMS模块组件

Biwen.QuickApi.Contents - 一个强大的无头CMS扩展,提供以下功能:

  • 灵活的内容模型定义系统
  • 多种字段类型支持(文本、Markdown、数字、日期、图片等)
  • 内容版本控制和审计跟踪
  • 内容渲染服务与自定义视图模板
  • 通过Slug友好URL访问内容
  • 完整的内容API(创建、查询、更新、删除、预览)
  • 内容状态工作流(草稿、发布、归档)

代码示例

基础QuickApi示例

public class MyStore
{
    public static Todo[] SampleTodos()
    {
        return [new(1, "Walk the dog"), new(2, "Buy groceries")];
    }
}

[QuickApi("todos")] // 映射到 /api/todos
public class TodoApi : BaseQuickApi<EmptyRequest,Todo[]>
{
    public override async ValueTask<Todo[]> ExecuteAsync(EmptyRequest request)
    {
        await Task.CompletedTask;
        return MyStore.SampleTodos();
    }
}

带参数的API示例

public class CreateTodoRequest : BaseRequest<CreateTodoRequest>
{
    [Required]
    public string Title { get; set; } = null!;
    
    public bool IsCompleted { get; set; }
}

[QuickApi("todos", Verbs = Verb.POST)]
[OpenApiMetadata("创建待办事项", "添加一个新的待办事项到系统")]
public class CreateTodoApi : BaseQuickApi<CreateTodoRequest, Todo>
{
    private readonly ITodoService _todoService;
    
    public CreateTodoApi(ITodoService todoService)
    {
        _todoService = todoService;
    }
    
    public override async ValueTask<Todo> ExecuteAsync(CreateTodoRequest request, CancellationToken cancellationToken)
    {
        return await _todoService.CreateAsync(request.Title, request.IsCompleted);
    }
}

使用事件系统示例

// 定义事件
public record TodoCreatedEvent(Todo Todo) : IEvent;

// 发布事件
[QuickApi("todos", Verbs = Verb.POST)]
public class CreateTodoApi : BaseQuickApi<CreateTodoRequest, Todo>
{
    private readonly ITodoService _todoService;
    private readonly IPublisher _publisher;
    
    public CreateTodoApi(ITodoService todoService, IPublisher publisher)
    {
        _todoService = todoService;
        _publisher = publisher;
    }
    
    public override async ValueTask<Todo> ExecuteAsync(CreateTodoRequest request)
    {
        var todo = await _todoService.CreateAsync(request.Title, request.IsCompleted);
        
        // 发布事件
        await _publisher.PublishAsync(new TodoCreatedEvent(todo));
        
        return todo;
    }
}

// 处理事件
[EventHandler]
public class TodoCreatedEventHandler : IEventHandler<TodoCreatedEvent>
{
    private readonly ILogger<TodoCreatedEventHandler> _logger;
    
    public TodoCreatedEventHandler(ILogger<TodoCreatedEventHandler> logger)
    {
        _logger = logger;
    }
    
    public Task HandleAsync(TodoCreatedEvent @event)
    {
        _logger.LogInformation("新的待办事项已创建: {Title}", @event.Todo.Title);
        return Task.CompletedTask;
    }
}

设计理念与特点

  • REPR设计模式:Biwen.QuickApi遵循 REPR 设计(Request-Endpoint-Response),使API开发结构清晰
  • 开箱即用:内置常用功能,无需额外配置即可使用
  • 模块化架构:通过模块化设计,实现功能的即插即用和业务的清晰分离
  • 强大的扩展性:通过扩展接口,可以轻松定制和扩展框架功能
  • 约定优于配置:减少配置代码,提高开发效率
  • 完整的文档支持:下载项目源代码运行Biwen.QuickApi.DocSite项目获取详细文档

社区与支持

开发工具

依赖环境&库