Please ensure your dependencies are ready.
Default port: 7101
Open http://127.0.0.1:7101
, you will see 'hi, this is aelf-block-api.'.
- 1.aelf-scan-mysql: Start up aelf-scan-mysql at first. There are mysql and redis services in this project
- 2.NodeJS: You can see the JS dependencies in package.json, we use egg.js(Node.js & Koa).
-
- Redis, you need a redis
set your own configs in .env
include: sql
, endpoint
and side chain APIs
- sql: mysql service in
aelf-scan-mysql
- endpoint: chain endpoint
- side chain APIs: other chains'
aelf-block-api
services URLs
And Redis config in config/config.default.js
Warning About Mysql:
- Please do not use root. Use the normal users without SUPER privilege.
Grant Demo
CREATE USER 'normal_aelf'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT select, insert, update, delete on aelf_test.* TO 'normal_aelf'@'localhost';
try to use build.sh at first.
npm install
# for local development
npm run dev
# for production
npm start
# for shutdown in production environment
npm stop
If you want test Post API.
You must set header x-csrf-token=(csrfToken in cookie).
// for a javascript example
const csrf = document.cookie.match(/csrfToken=[^;]*/)[0].replace('csrfToken=', '');
fetch(`/block/api/address/transactions`, {
credentials: 'include',
method: 'POST',
headers: {
// About csrf token
// csrf: https://github.com/pillarjs/understanding-csrf/blob/master/README_zh.md
// csrf: https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/index.html
'x-csrf-token': csrf,
'Content-Type': 'application/json',
'Accept': 'application/json'
}
}).then().catch();
You can get the docs in the folder ./postman
We advise you implement your own API like the example.
// 1.
// The framework recommends that the Controller layer is responsible for processing request parameters(verification and transformation)
// from user's requests, then calls related business methods in Service, encapsulates and sends back business result:
// 1.retrieves parameters passed by HTTP.
// 2.verifies and assembles parameters.
// 3.calls the Service to handle business, if necessary,
// transforms Service process results to satisfy user's requirement.
// 4.sends results back to user by HTTP.
// 框架推荐 Controller 层主要对用户的请求参数进行处理(校验、转换),然后调用对应的 service 方法处理业务,得到业务结果后封装并返回:
// 获取用户通过 HTTP 传递过来的请求参数。
// 校验、组装参数。
// 调用 Service 进行业务处理,必要时处理转换 Service 的返回结果,让它适应用户的需求。
// 通过 HTTP 将结果响应给用户。
// 2.
// give the params keysRule.
// Example, code snippets.
// controller/address.js
async function getTokens() {
let ctx = this.ctx;
// Not only param validate but also a detail param doc.
// About 'paramater': https://github.com/node-modules/parameter
const keysRule = {
address: 'string',
limit: {
type: 'int',
required: false,
allowEmpty: true,
max: 500,
min: 0
},
page: {
type: 'int',
required: false,
allowEmpty: true
},
order: {
type: 'string',
required: false,
allowEmpty: true
},
nodes_info: {
type: 'boolean',
required: false,
allowEmpty: true
}
};
try {
let {
address,
limit,
page,
order,
nodes_info
} = ctx.request.query;
let options = {
address,
limit: limit ? parseInt(limit, 10) : 0,
page: page ? parseInt(page, 10) : 0,
order: order || 'DESC',
nodes_info: nodes_info || false
};
ctx.validate(keysRule, options);
let result = await ctx.service.address.getTokens(options);
formatOutput(ctx, 'get', result);
}
catch (error) {
formatOutput(ctx, 'error', error, 422);
}
}
// service/address.js
async function getTokens(options) {
// get the tokens information.
}