跳转到正文

API 参考(全量路由,代码自动核对)

本页按 app/main.py 的实际挂载结果和各路由文件的装饰器整理,覆盖 app/main.pyapp/api/*.pyapp/services/chemical_info.py

路由挂载

  • announcements.router -> /api
  • cart_sync.router -> /api
  • chemical_info.router -> /api
  • chemical_name_map.router -> /api
  • common_shelf.router -> /api
  • consumable_orders.router -> /api
  • error_logs.router -> /api
  • events.router -> /api
  • inventory.router -> /api
  • reagent_orders.router -> /api
  • user_logs.router -> /api
  • user_sessions.router -> /api/users/me
  • users.router -> /api
  • inventory_extended_routes 通过 register_* 动态挂到 inventory.router,最终前缀为 /api/inventory
  • reagent_orders_workflow 通过 register_* 动态挂到 reagent_orders.router,最终前缀为 /api/reagent-orders

权限判定

  • 管理员:路由依赖 require_admin 或参数类型为 AdminUser
  • 已登录用户:路由依赖 get_current_user / get_current_session 或参数类型为 CurrentUser
  • 公开:无上述依赖。
  • POST /api/users/logout 为公开接口,但实现会校验当前会话 Cookie/Token 后执行退出。

路由清单(共 86 条)

应用级路由 (main)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/root公开200app/main.py370
GET/cart-importcart_import_redirect公开200app/main.py396
GET/healthhealth_check公开200app/main.py382

用户与认证 (users)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/users/list_users管理员query: username;query: full_namedict200app/api/users.py480
POST/api/users/create_user管理员body: UserCreateUserResponsestatus.HTTP_201_CREATEDapp/api/users.py447
POST/api/users/change-passwordchange_password已登录用户body: ChangePasswordRequest200app/api/users.py410
POST/api/users/loginlogin公开body: LoginRequest200app/api/users.py211
POST/api/users/logoutlogout公开200app/api/users.py365
GET/api/users/meget_me已登录用户UserResponse200app/api/users.py607
GET/api/users/searchsearch_users已登录用户query: qlist[UserSearchItem]200app/api/users.py579
DELETE/api/users/{user_id}delete_user管理员path: user_idstatus.HTTP_204_NO_CONTENTapp/api/users.py768
GET/api/users/{user_id}get_user已登录用户path: user_idPublicUserResponse200app/api/users.py613
PUT/api/users/{user_id}update_user已登录用户path: user_id;body: UserUpdateUserResponse200app/api/users.py628
POST/api/users/{user_id}/activateactivate_user管理员path: user_idUserResponse200app/api/users.py732
DELETE/api/users/{user_id}/avatardelete_avatar已登录用户path: user_iddict200app/api/users.py922
POST/api/users/{user_id}/avatarupload_avatar已登录用户path: user_iddict200app/api/users.py958
POST/api/users/{user_id}/reset-passwordreset_user_password管理员path: user_id;body: ResetPasswordRequest200app/api/users.py858
PUT/api/users/{user_id}/roleupdate_user_role管理员path: user_idUserResponse200app/api/users.py812

会话与设备 (user_sessions)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
DELETE/api/users/me/sessions/delete_all_sessions已登录用户200app/api/user_sessions.py92
GET/api/users/me/sessions/list_sessions已登录用户List[SessionResponse]200app/api/user_sessions.py43
POST/api/users/me/sessions/refreshrefresh_session已登录用户200app/api/user_sessions.py119
DELETE/api/users/me/sessions/{session_id}delete_session已登录用户path: session_id200app/api/user_sessions.py60
PATCH/api/users/me/sessions/{session_id}update_session已登录用户path: session_id;body: SessionUpdateRequestSessionResponse200app/api/user_sessions.py174

管理员用户日志 (user_logs)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
POST/api/admin/users/logs/queryget_user_logs管理员body: LogsQueryRequestdict200app/api/user_logs.py162
POST/api/admin/users/{user_id}/logs-tokengenerate_logs_token管理员path: user_id200app/api/user_logs.py132

库存基础接口 (inventory)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/inventory/list_inventory已登录用户query: search200app/api/inventory.py379
DELETE/api/inventory/{inventory_id}delete_inventory已登录用户path: inventory_idstatus.HTTP_204_NO_CONTENTapp/api/inventory.py549
GET/api/inventory/{inventory_id}get_inventory已登录用户path: inventory_idInventoryResponse200app/api/inventory.py460
PUT/api/inventory/{inventory_id}update_inventory已登录用户path: inventory_id;body: InventoryUpdateInventoryResponse200app/api/inventory.py469

库存扩展接口 (inventory_extended_routes)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/inventory/cas/{cas_number}check_cas_inventory已登录用户path: cas_number200app/api/inventory_extended_routes.py99
GET/api/inventory/cas/{cas_number}/totalget_cas_total_quantity已登录用户path: cas_number200app/api/inventory_extended_routes.py140
GET/api/inventory/code/{internal_code}get_inventory_by_internal_code已登录用户path: internal_codeInventoryResponse200app/api/inventory_extended_routes.py163
GET/api/inventory/dashboard/my-borrowsget_my_borrows已登录用户200app/api/inventory_extended_routes.py214
GET/api/inventory/dashboard/pending-stockinget_pending_stockin已登录用户200app/api/inventory_extended_routes.py277
GET/api/inventory/exportexport_inventory已登录用户200app/api/inventory_extended_routes.py171
POST/api/inventory/importimport_inventory已登录用户file: file200app/api/inventory_extended_routes.py333
GET/api/inventory/import/templateget_import_template已登录用户200app/api/inventory_extended_routes.py312
POST/api/inventory/manual-addmanual_add_inventory已登录用户body: ManualInventoryCreatedict200app/api/inventory_extended_routes.py187
POST/api/inventory/{inventory_id}/borrowborrow_item已登录用户path: inventory_idInventoryResponse200app/api/inventory_extended_routes.py392
GET/api/inventory/{inventory_id}/borrow-historyget_borrow_history已登录用户path: inventory_id200app/api/inventory_extended_routes.py559
POST/api/inventory/{inventory_id}/returnreturn_item已登录用户path: inventory_iddict200app/api/inventory_extended_routes.py476

常用货架接口 (common_shelf)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/common-shelf/groupslist_common_shelf_groups已登录用户query: searchsearch_fieldfuzzysort_bysort_orderCommonShelfGroupListResponse200app/api/common_shelf.py131
POST/api/common-shelf/manual-addmanual_add_common_shelf已登录用户body: CommonShelfManualCreatedict200app/api/common_shelf.py206
GET/api/common-shelf/groups/{group_key}/locationsget_common_shelf_group_locations已登录用户path: group_keylist[CommonShelfLocationSummaryResponse]200app/api/common_shelf.py155
GET/api/common-shelf/groups/{group_key}/location-suggestionsget_common_shelf_group_location_suggestions已登录用户path: group_keylist[str]200app/api/common_shelf.py164
GET/api/common-shelf/location-suggestionsget_common_shelf_location_suggestions_by_fields已登录用户query: cas_numberbrandspecificationlist[str]200app/api/common_shelf.py169
GET/api/common-shelf/groups/{group_key}/itemsget_common_shelf_group_items已登录用户path: group_keylist[CommonShelfGroupItemResponse]200app/api/common_shelf.py187
PUT/api/common-shelf/groups/{group_key}update_common_shelf_group已登录用户path: group_key;body: CommonShelfGroupEditRequestdict200app/api/common_shelf.py229
PUT/api/common-shelf/groups/{group_key}/items/{item_id}update_common_shelf_item已登录用户path: group_keyitem_id;body: CommonShelfGroupItemUpdateRequestdict200app/api/common_shelf.py312
POST/api/common-shelf/groups/{group_key}/add-bottlesadd_common_shelf_bottles已登录用户path: group_key;body: CommonShelfAddBottlesRequestdict200app/api/common_shelf.py357
POST/api/common-shelf/groups/{group_key}/remove-oneremove_one_common_shelf已登录用户path: group_key;body: CommonShelfRemoveOneRequestdict200app/api/common_shelf.py399
DELETE/api/common-shelf/groups/{group_key}/items/{item_id}delete_common_shelf_item已登录用户path: group_keyitem_iddict200app/api/common_shelf.py439
DELETE/api/common-shelf/groups/{group_key}delete_common_shelf_group管理员path: group_keydict200app/api/common_shelf.py473
GET/api/common-shelf/exportexport_common_shelf已登录用户200app/api/common_shelf.py506

CAS 主数据接口 (chemical_name_map)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/chemical-name-maplist_chemical_name_map已登录用户query: searchsearch_fieldfuzzyskiplimitdict200app/api/chemical_name_map.py85
POST/api/chemical-name-mapcreate_chemical_name_map已登录用户body: ChemicalNameMapCreateChemicalNameMapResponse200app/api/chemical_name_map.py123
PUT/api/chemical-name-map/{item_id}update_chemical_name_map已登录用户path: item_id;body: ChemicalNameMapUpdateChemicalNameMapResponse200app/api/chemical_name_map.py149
DELETE/api/chemical-name-map/{item_id}delete_chemical_name_map已登录用户path: item_iddict200app/api/chemical_name_map.py173

试剂订单基础接口 (reagent_orders)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/reagent-orders/list_reagent_orders已登录用户query: search200app/api/reagent_orders.py351
POST/api/reagent-orders/create_reagent_order已登录用户body: ReagentOrderCreateReagentOrderResponsestatus.HTTP_201_CREATEDapp/api/reagent_orders.py275
GET/api/reagent-orders/cas-overview/{cas_number}get_cas_overview已登录用户path: cas_number200app/api/reagent_orders.py489
GET/api/reagent-orders/exportexport_reagent_orders管理员200app/api/reagent_orders.py472
GET/api/reagent-orders/{order_id}get_reagent_order已登录用户path: order_idReagentOrderResponse200app/api/reagent_orders.py599
PUT/api/reagent-orders/{order_id}update_reagent_order已登录用户path: order_id;body: ReagentOrderUpdateReagentOrderResponse200app/api/reagent_orders.py614

试剂订单工作流接口 (reagent_orders_workflow)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/reagent-orders/dashboard/arrived-ordersget_arrived_reagent_orders已登录用户200app/api/reagent_orders_workflow.py272
GET/api/reagent-orders/dashboard/my-reagent-ordersget_my_reagent_orders已登录用户200app/api/reagent_orders_workflow.py299
DELETE/api/reagent-orders/{order_id}delete_reagent_order已登录用户path: order_idstatus.HTTP_204_NO_CONTENTapp/api/reagent_orders_workflow.py361
POST/api/reagent-orders/{order_id}/approveapprove_reagent_order管理员path: order_id200app/api/reagent_orders_workflow.py129
POST/api/reagent-orders/{order_id}/confirm-arrivalconfirm_reagent_arrival已登录用户path: order_id200app/api/reagent_orders_workflow.py184
POST/api/reagent-orders/{order_id}/rejectreject_reagent_order管理员path: order_id200app/api/reagent_orders_workflow.py154
POST/api/reagent-orders/{order_id}/stock-instock_in_reagent_order已登录用户path: order_id;body: StockInRequestdict200app/api/reagent_orders_workflow.py387

耗材订单接口 (consumable_orders)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/consumable-orders/list_consumable_orders已登录用户query: search200app/api/consumable_orders.py244
POST/api/consumable-orders/create_consumable_order已登录用户body: ConsumableOrderCreateConsumableOrderResponsestatus.HTTP_201_CREATEDapp/api/consumable_orders.py203
GET/api/consumable-orders/dashboard/my-consumable-ordersget_my_consumable_orders已登录用户200app/api/consumable_orders.py572
GET/api/consumable-orders/exportexport_consumable_orders管理员200app/api/consumable_orders.py356
DELETE/api/consumable-orders/{order_id}delete_consumable_order已登录用户path: order_idstatus.HTTP_204_NO_CONTENTapp/api/consumable_orders.py627
GET/api/consumable-orders/{order_id}get_consumable_order已登录用户path: order_idConsumableOrderResponse200app/api/consumable_orders.py373
PUT/api/consumable-orders/{order_id}update_consumable_order已登录用户path: order_id;body: ConsumableOrderUpdateConsumableOrderResponse200app/api/consumable_orders.py388
POST/api/consumable-orders/{order_id}/approveapprove_consumable_order管理员path: order_id200app/api/consumable_orders.py463
POST/api/consumable-orders/{order_id}/completecomplete_consumable_order已登录用户path: order_id200app/api/consumable_orders.py523
POST/api/consumable-orders/{order_id}/rejectreject_consumable_order管理员path: order_id200app/api/consumable_orders.py496

公告接口 (announcements)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/announcements/list_announcements管理员List[AnnouncementResponse]200app/api/announcements.py93
POST/api/announcements/create_announcement管理员body: AnnouncementCreateAnnouncementResponsestatus.HTTP_201_CREATEDapp/api/announcements.py130
DELETE/api/announcements/images/{filename}delete_announcement_image管理员path: filenamestatus.HTTP_204_NO_CONTENTapp/api/announcements.py330
GET/api/announcements/publicget_public_announcements已登录用户List[AnnouncementResponse]200app/api/announcements.py52
GET/api/announcements/storage-infoget_storage_info管理员200app/api/announcements.py81
POST/api/announcements/upload-imageupload_announcement_image管理员200app/api/announcements.py300
DELETE/api/announcements/{announcement_id}delete_announcement管理员path: announcement_idstatus.HTTP_204_NO_CONTENTapp/api/announcements.py224
GET/api/announcements/{announcement_id}get_announcement管理员path: announcement_idAnnouncementResponse200app/api/announcements.py177
PUT/api/announcements/{announcement_id}update_announcement管理员path: announcement_id;body: AnnouncementUpdateAnnouncementResponse200app/api/announcements.py194
POST/api/announcements/{announcement_id}/toggle-pintoggle_pin_announcement管理员path: announcement_idAnnouncementResponse200app/api/announcements.py252
POST/api/announcements/{announcement_id}/toggle-visibilitytoggle_visibility_announcement管理员path: announcement_idAnnouncementResponse200app/api/announcements.py276

SSE 事件接口 (events)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/eventssse_events已登录用户200app/api/events.py57

错误日志接口 (error_logs)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/error-logsget_error_logs已登录用户query: hours;query: lines200app/api/error_logs.py34

购物车同步接口 (cart_sync)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
POST/api/cart-syncsync_cart已登录用户body: CartItemRequestCartSyncResponse200app/api/cart_sync.py138
POST/api/cart-sync/importimport_cart已登录用户body: CartImportRequestCartImportResponse200app/api/cart_sync.py170

化学信息接口 (chemical_info)

方法路径函数权限关键参数(path/query/body/file)返回模型状态码代码
GET/api/chemical-info/{cas_number}get_chemical_info已登录用户path: cas_number200app/services/chemical_info.py442

二次开发建议

  • 新增 API 时,优先沿用现有依赖模式(CurrentUser / AdminUser),避免权限漂移。
  • 新增 /api/inventory/*/api/reagent-orders/* 路径时,先确认命名路由优先级,避免被 /{id} 路由吞掉。
  • 新增列表筛选条件时,需要同步评估索引、缓存 Key、FTS 字段和前端查询参数。

参考代码

开源项目 · Apache-2.0 license