# 图书中心系统 API 文档 ## 基础信息 - **Base URL**: `http://localhost:9009` - **API 版本**: v1.0 - **数据格式**: JSON - **字符编码**: UTF-8 --- ## 目录 - [图书管理](#图书管理) - [搜索服务](#搜索服务) - [销量管理](#销量管理) - [图片管理](#图片管理) - [系统监控](#系统监控) - [Elasticsearch 操作](#elasticsearch-操作) --- ## 通用响应格式 ### 成功响应 ```json { "code": 200, "message": "success", "data": { ... } } ``` ### 错误响应 ```json { "error": "错误描述", "details": "详细错误信息" } ``` ### 分页响应 ```json { "current_page": 1, "data": [...], "per_page": 10, "total": 100 } ``` --- ## 图书管理 ### 1. 根据 ISBN 查询图书 **请求**: ```http GET /api/book/isbn?isbn=9787111111111 ``` **参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | isbn | string | 是 | 图书ISBN号 | **响应示例**: ```json { "code": 200, "message": "success", "data": { "id": 123456, "isbn": "9787111111111", "book_name": "Go语言编程", "author": "作者名", "publisher": "清华大学出版社", "fix_price": 99.00, "book_pic": "http://example.com/image.jpg", "update_time": "1705228800" } } ``` ### 2. 添加图书到 ES **请求**: ```http POST /api/es/book Content-Type: application/json { "book_name": "Go语言编程实战", "isbn": "9787111122222", "author": "作者名", "publisher": "出版社", "fix_price": 89.00, "book_pic": { "localPath": "", "pddPath": "http://example.com/image.jpg" }, "book_pic_s": { "localPath": "", "pddResponse": "http://example.com/image_s.jpg" } } ``` **响应示例**: ```json { "code": 200, "message": "success", "data": { "id": 123457, "source": "service" } } ``` ### 3. 批量添加图书 **请求**: ```http POST /api/es/books/batch Content-Type: application/json { "books": [ { "book_name": "Go语言编程", "isbn": "9787111111111", "author": "作者1", "publisher": "出版社1" }, { "book_name": "Python实战", "isbn": "9787111133333", "author": "作者2", "publisher": "出版社2" } ] } ``` **响应示例**: ```json { "code": 200, "message": "批量插入完成", "data": { "total_count": 2, "success_count": 2, "failed_count": 0, "results": [ { "index": 0, "isbn": "9787111111111", "success": true, "document": "9787111111111" }, { "index": 1, "isbn": "9787111133333", "success": true, "document": "9787111133333" } ] } } ``` ### 4. 检查图书是否存在 **请求**: ```http GET /api/es/book/exists?isbn=9787111111111 ``` **响应示例**: ```json { "code": 200, "success": true, "data": { "exists": true, "isbn": "9787111111111", "book_id": "123456", "book_name": "Go语言编程", "message": "书籍存在" } } ``` ### 5. 更新图书字段 **请求**: ```http PUT /api/es/book/fields Content-Type: application/json { "isbn": "9787111111111", "data": { "fix_price": 88.00, "author": "新作者名", "total_sale": 1000 } } ``` **响应示例**: ```json { "code": 200, "message": "success", "data": { "isbn": "9787111111111", "updated": 1, "fields_updated": 3, "updated_fields": ["fix_price", "author", "total_sale"] } } ``` ### 6. 删除图书 **请求**: ```http DELETE /api/es/book?isbn=9787111111111 ``` 或 ```http DELETE /api/es/book?id=123456 ``` **响应示例**: ```json { "code": 200, "message": "success", "data": { "deleted": true } } ``` --- ## 搜索服务 ### 1. 关键词搜索 **请求**: ```http GET /api/search?keyword=Go语言&page=1&pageSize=10 ``` **参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | keyword | string | 是 | 搜索关键词 | | page | int | 否 | 页码,默认1 | | pageSize | int | 否 | 每页数量,默认10 | **响应示例**: ```json { "count": 100, "data": [ { "id": 123456, "book_name": "Go语言编程", "author": "作者名", "isbn": "9787111111111", "publisher": "清华大学出版社", "fix_price": 99.00 } ] } ``` ### 2. 多条件搜索 **请求**: ```http GET /api/search/conditions?book_name=Go&author=张三&page=1&pageSize=20 ``` **支持的查询参数**: - `book_name` - 书名 - `isbn` - ISBN - `author` - 作者 - `category` - 分类 - `publisher` - 出版社 - `publication_time` - 出版时间范围(逗号分隔) - `day_sale_7` - 7天销量范围 - `total_sale` - 总销量范围 - `sell_counts` - 在售数量范围 - `is_suit` - 是否套装 (0/1) - `is_return` - 是否驳回 (0/1) - `is_filter` - 过滤字段 - `book_pic` - 是否有图 (0/1) - `picType` - 图片类型 (1-官图, 2-小图) - `saleSelect` - 销量维度选择 (7/15/30/60/90/180/365/0/1) - `categoryType` - 分类类型 (1-教材, 其他-非教材) **响应示例**: ```json { "code": 200, "current_page": 1, "data": [...], "per_page": 20, "total": 156 } ``` ### 3. 全字段搜索 **请求**: ```http GET /api/search/all?q=Go语言编程 ``` **参数**: - `q` - 搜索关键词(搜索所有字段) --- ## 销量管理 ### 1. 更新在售数量 **请求**: ```http POST /api/sellcounts/update?isbn=9787111111111&onSaleCount=100 ``` **参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | isbn | string | 是 | 图书ISBN | | onSaleCount | int | 是 | 在售数量(非负整数) | **响应示例**: ```json { "code": 200, "message": "success", "data": { "isbn": "9787111111111", "sell_counts": 100, "async": true } } ``` ### 2. 从外部API更新在售数量 **请求**: ```http POST /api/sellcounts/fetch?isbn=9787111111111 ``` **说明**: 自动调用 tail API 获取在售数量并更新 **响应示例**: ```json { "code": 200, "message": "success", "data": { "isbn": "9787111111111", "on_sale_count": 150, "async": true } } ``` --- ## 图片管理 ### 1. 更新图书图片 **请求**: ```http POST /api/book/pic/update?isbn=9787111111111&book_pic=http://example.com/new.jpg&book_pic_s=http://example.com/new_s.jpg ``` **参数**: | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | isbn | string | 是 | 图书ISBN | | book_pic | string | 否 | 大图URL | | book_pic_s | string | 否 | 小图URL | **响应示例**: ```json { "code": 200, "message": "success", "data": { "updated": 1 } } ``` --- ## 系统监控 ### 1. 健康检查 **请求**: ```http GET /health ``` **响应示例**: ```json { "status": "healthy", "mysql": "connected", "redis": "connected", "elasticsearch": "connected", "timestamp": "2025-01-14T10:30:00Z" } ``` ### 2. 服务就绪检查 **请求**: ```http GET /ready ``` **响应示例**: ```json { "ready": true } ``` --- ## Elasticsearch 操作 ### 1. 查询所有索引 **请求**: ```http GET /api/es/indices ``` **响应示例**: ```json { "code": 200, "message": "success", "data": [ "books-from-mysql-v2", "books-from-mysql-new", "test-go-index" ] } ``` ### 2. 获取索引详情 **请求**: ```http GET /api/es/index/detail?indexName=books-from-mysql-v2 ``` **响应示例**: ```json { "code": 200, "message": "success", "data": { "books-from-mysql-v2": { "aliases": {}, "mappings": { ... }, "settings": { ... } } } } ``` ### 3. 获取文档数量 **请求**: ```http GET /api/es/index/count?indexName=books-from-mysql-v2 ``` **响应示例**: ```json { "code": 200, "message": "success", "data": { "count": 1000000 } } ``` ### 4. 检查套装书 **请求**: ```http GET /api/book/check-suit?bookName=Go语言编程(套装) ``` **响应示例**: ```json { "code": 200, "message": "success", "data": { "book_name": "Go语言编程(套装)", "is_suit": true } } ``` ### 5. 更新套装标记 **请求**: ```http PUT /api/book/suit Content-Type: application/json { "isbn": "9787111111111" } ``` **说明**: 自动根据书名判断是否为套装书并更新 **响应示例**: ```json { "code": 200, "message": "success", "data": { "isbn": "9787111111111", "book_name": "Go语言编程(套装)", "is_suit": 1, "updated": 1, "contains_suit_keyword": true } } ``` ### 6. 统计ID范围数量 **请求**: ```http GET /api/es/count/range?minID=1&maxID=100000 ``` **响应示例**: ```json { "code": 200, "minID": 1, "maxID": 100000, "count": 50000 } ``` --- ## 错误码说明 | 错误码 | 说明 | |--------|------| | 200 | 成功 | | 400 | 请求参数错误 | | 404 | 资源不存在 | | 500 | 服务器内部错误 | --- ## 请求示例 ### 使用 curl ```bash # 查询图书 curl "http://localhost:9009/api/book/isbn?isbn=9787111111111" # 搜索图书 curl "http://localhost:9009/api/search?keyword=Go语言&page=1&pageSize=10" # 添加图书 curl -X POST http://localhost:9009/api/es/book \ -H "Content-Type: application/json" \ -d '{"book_name":"Go语言编程","isbn":"9787111111111","author":"作者名"}' # 更新在售数量 curl -X POST "http://localhost:9009/api/sellcounts/update?isbn=9787111111111&onSaleCount=100" ``` ### 使用 Go ```go import "net/http" // 查询图书 resp, err := http.Get("http://localhost:9009/api/book/isbn?isbn=9787111111111") if err != nil { log.Fatal(err) } defer resp.Body.Close() // 解析响应 var result map[string]interface{} json.NewDecoder(resp.Body).Decode(&result) fmt.Println(result) ``` ### 使用 JavaScript ```javascript // 查询图书 fetch('http://localhost:9009/api/book/isbn?isbn=9787111111111') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error(error)); ``` --- ## 注意事项 1. **所有时间戳格式**: Unix 时间戳(秒) 2. **价格单位**: 分(需要除以100转换为元) 3. **分页参数**: page 从 1 开始 4. **异步操作**: 部分更新操作为异步执行,返回 `async: true` 5. **CORS**: 默认允许跨域请求 --- ## 更新日志 ### v1.0.0 (2025-01-14) - 初始 API 文档 - 完整的图书管理接口 - Elasticsearch 操作接口 - 销量管理接口 --- **最后更新**: 2025-01-14