前言 {#前言}
支持跨域、随意开关接口的 hexo 博客 api 插件hexo-info-api。
响应头 {#响应头}
|-------------------|------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5
| Content-Type: application/json; charset=utf-8 Access-Control-Allow-Origin: <config.allowOrigin> Access-Control-Allow-Credentials: true
|
数据将以 UTF-8 编码 json 格式返回
你可以从配置文件设置允许跨域访问的域名(设置为 * 为允许所有域名)
安装 {#安装}
|-------------------|------------------------------------------------------------------------------|
| 1 2 3 4 5
| # npm npm install hexo-info-api --save # yarn yarn add hexo-info-api
|
配置 {#配置}
向 hexo 的配置文件 _config.yml
中添加以下内容
|---------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| hexo_info_api: allowOrigin: "*" # 设置为 "*" 以允许所有源访问 (跨域访问 Access-Control-Allow-Origin) enable: # 启用你需要的 api 接口 (只有在这里启用的 api 才会生效) - getInfo - getPostCount - getPosts - getPostsByCategory - getPostsByCategoryId - getPostsByTag - getPostsByTagId - getPostByPath - getPostById - getCategories - getTags # 禁用默认 api (host:port/api/) 默认: false # 该 api 的作用为返回所有启用的 api 接口 disable_default_api: false
|
运行 (测试) {#运行-测试}
|---------------|-------------------------------------------------------------|
| 1 2 3
| hexo s #访问 http://localhost:4000/api/ 查看你启用的 api 接口
|
返回结果 {#返回结果}
这是 GET /api/getPostCount 接口的返回结果
|---------------------|------------------------------------------------------------|
| 1 2 3 4 5 6
| { "type": "getPostCount", "data": { "count": 0 } }
|
接口说明 {#接口说明}
- 默认接口
GET /api/ - 获取当前启用的 API 接口列表
例子:
|------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| { "type": "apiInfo", "data": { "enabled": [ "getInfo", "getPostCount", "getPosts", "getPostsByCategory", "getPostsByCategoryId", "getPostsByTag", "getPostsByTagId", "getPostByPath", "getPostById", "getCategories", "getTags" ] } }
|
- 获取网站信息
GET /api/getInfo/ - 获取当前网站的信息(数据来源与 _config.yml)
例子:
|------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12
| { "type": "getInfo", "data": { "title": "Hexo中文测试", "subtitle": "", "description": "", "author": "John Doe", "language": "en", "timezone": "", "url": "http://example.com" } }
|
- 获取文章数量
GET /api/getPostCount/ - 获取当前网站的文章数量
例子:
|---------------------|-------------------------------------------------------------|
| 1 2 3 4 5 6
| { "type": "getPostCount", "data": { "count": 10 } }
|
- 获取文章列表
GET /api/getPosts/ - 获取当前网站的文章列表(所有文章)。返回数据.data.posts: Array
例子:
|------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10
| { title: String, date: String, description: String, categories: Array, tags: Array, _path: String, _link: String, _id: String }
|
例子:
|------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| { "type": "getPosts", "data": { "posts": [ { "title": "1", "date": "2022-09-06T01:24:03.000Z", "description": "", "categories": [ { "name": "test1", "_id": "cl7ps65yb0000x88d98gzczh3" }, { "name": "test2", "_id": "cl7ps65yd0003x88d7518aszd" } ], "tags": [ { "name": "test_tag1", "_id": "cl7ps65yc0001x88d71rr08su" }, { "name": "test_tag2", "_id": "cl7ps65yc0002x88d2kvegq0o" }, { "name": "test_tag3", "_id": "cl7ps65yd0004x88db7q32te3" } ], "_path": "2022/09/06/1/", "_link": "http://example.com/2022/09/06/1/", "_id": "cl7pldj300000p08detj8etxb" }, { "title": "2", "date": "2022-09-06T01:24:04.000Z", "description": "", "categories": [], "tags": [], "_path": "2022/09/06/2/", "_link": "http://example.com/2022/09/06/2/", "_id": "cl7pldj340001p08d6o7a7z1w" }, { "title": "Hello World", "date": "2022-09-06T01:22:20.002Z", "description": "", "categories": [], "tags": [], "_path": "2022/09/06/hello-world/", "_link": "http://example.com/2022/09/06/hello-world/", "_id": "cl7pldj3h0009p08dcmvx29lk" } ] } }
|
- 获取分类下的文章列表
GET /api/getPostsByCategory/:category - 获取当前网站的文章列表(指定分类下的文章)
例子:
|------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| { "type": "getPostsByCategory", "data": [ { "title": "1", "date": "2022-09-06T01:24:03.000Z", "description": "", "categories": [ { "name": "test1", "_id": "cl7ps65yb0000x88d98gzczh3" }, { "name": "test2", "_id": "cl7ps65yd0003x88d7518aszd" } ], "tags": [ { "name": "test_tag1", "_id": "cl7ps65yc0001x88d71rr08su" }, { "name": "test_tag2", "_id": "cl7ps65yc0002x88d2kvegq0o" }, { "name": "test_tag3", "_id": "cl7ps65yd0004x88db7q32te3" } ], "_path": "2022/09/06/1/", "_link": "http://example.com/2022/09/06/1/", "_id": "cl7pldj300000p08detj8etxb" } ] }
|
- 获取分类 ID 下的文章列表
GET /api/getPostsByCategoryId/:categoryId - 获取当前网站的文章列表(指定分类ID下的文章)
例子: (与 获取分类下的文章列表 返回的数据相同)
- 获取标签下的文章列表
GET /api/getPostsByTag/:tag - 获取当前网站的文章列表(指定标签下的文章)
例子:
|------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| { "type": "getPostsByTag", "data": [ { "title": "1", "date": "2022-09-06T01:24:03.000Z", "description": "", "categories": [ { "name": "test1", "_id": "cl7ps65yb0000x88d98gzczh3" }, { "name": "test2", "_id": "cl7ps65yd0003x88d7518aszd" } ], "tags": [ { "name": "test_tag1", "_id": "cl7ps65yc0001x88d71rr08su" }, { "name": "test_tag2", "_id": "cl7ps65yc0002x88d2kvegq0o" }, { "name": "test_tag3", "_id": "cl7ps65yd0004x88db7q32te3" } ], "_path": "2022/09/06/1/", "_link": "http://example.com/2022/09/06/1/", "_id": "cl7pldj300000p08detj8etxb" } ] }
|
- 获取标签 ID 下的文章列表
GET /api/getPostsByTagId/:tagId - 获取当前网站的文章列表(指定标签ID下的文章)
例子: (与获取标签下的文章列表
相同)
- 获取指定路径的文章数据
GET /api/getPostByPath/:path - 获取指定路径的文章数据
例子: api/getPostByPath/yyyy/mm/dd/hello-world/
|------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12
| { "type": "getPostByPath", "data": { "title": "Hello World", "date": "2022-09-06T01:22:20.002Z", "description": "", "categories": [], "tags": [], "content": "...html document...", "_id": "cl7pldj3h0009p08dcmvx29lk" } }
|
- 获取指定 ID 的文章数据
GET /api/getPostById/:id - 获取指定 ID 的文章数据
例子: (与 获取指定路径的文章数据
返回的数据相同)
- 获取分类列表
GET /api/getCategories/ - 获取分类列表
例子:
|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7
| { "type": "getCategories", "data": [ { "name": "test1", "_id": "cl7ps65yb0000x88d98gzczh3" }, { "name": "test2", "_id": "cl7ps65yd0003x88d7518aszd" } ] }
|
- 获取标签列表
GET /api/getTags/ - 获取标签列表
例子:
|------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10
| { "type": "getTags", "data": { "tags": [ { "name": "test_tag1", "_id": "cl7ps65yc0001x88d71rr08su" }, { "name": "test_tag2", "_id": "cl7ps65yc0002x88d2kvegq0o" }, { "name": "test_tag3", "_id": "cl7ps65yd0004x88db7q32te3" } ] } }
|