Emoji is a RESTful API example written in the Nature programming language. With the help of Nature's package management tool, emoji-api can also be used as a web framework.
Add dependency to package.toml
[dependencies]
emoji = { type = "git", version = "vx.x.x", url = "github.com/weiwenhao/emoji-api" }import fmt
import emoji.services.api
fn main() {
var app = api.new()
app.use(fn(ref<api.ctx_t> c):void! {
fmt.printf('request log %d %s\n', c.req.method, c.req.url)
c.next()
})
app.get('/hello/:msg', fn(ref<api.ctx_t> c):void! {
return c.json(200, {
'message': 'ok',
'data': 'hello ' + c.param('msg'),
})
})
app.listen(8888)
}import emoji.services.db
// dep: db = { type = "git", version = "v0.14.0", url = "github.com/weiwenhao/dbdriver" }
import db.result as db_result
fn main() {
// mysql://user:password@host:port/database
db.init('mysql://root:[email protected]:3306/emoji')
// get conn from pool
var result = db.conn().query('SELECT * FROM users')
type user_t = struct{
int id
string nickname
string? email
}
var list = db_result.scan<user_t>(result)
for u in list {
println(u.id, u.nickname, u.email)
}
}import emoji.services.jwt
fn main() {
jwt.init('Secret Key', 7200, 'emoji')
// Generate token
{string:any} custom_data = {
'username': 'john_doe',
'email': '[email protected]',
}
var token = jwt.generate('user123', custom_data, 0)
println('Generated token:', token)
// Verify token
var jwt_token = jwt.verify(token) catch e {
throw errorf('verify failed: %s', e.msg())
}
println('User ID (sub):', jwt_token.payload.sub)
}import json
import fmt
import emoji.services.api
import emoji.middlewares.auth
fn main() {
var app = api.new()
// need Header Authorization: Bearer Token
app.get('/users/auth', auth.handle, fn(ref<api.ctx_t> c):void! {
var user_id = c.get('auth_id') as int
// ...
})
}{
"db_host": "127.0.0.1:3306",
"db_database": "emoji",
"db_username": "username",
"db_password": "password",
"mail_host": "smtp.gmail.com",
"mail_port": 465,
"mail_username": "[email protected]",
"mail_password": "password",
"jwt_secret": "jwt.secret"
}
Import and load config
import json
import fmt
import emoji.services.config
fn main() {
var c = config.load('./config.json')
println(c.db_host, c.db_database, c.db_username, c.db_password)
}Only supports SSL mail
import emoji.services.mail
fn main() {
// SMTP configuration
var config = mail.config_t{
host: 'smtp.163.com',
port: 465,
username: 'xxxxxx',
password: 'xxxxxx',
helo_domain: 'localhost',
}
// Create plain text mail
var m = mail.mail_t{
from: '[email protected]',
to: ['[email protected]'],
cc: [],
bcc: [],
subject: 'Test Mail - Nature SMTP Client',
body: 'This is a test mail plain text content.\n\nSent time: 2025',
headers: {
'X-Mailer': 'Nature SMTP Client v1.0',
},
}
// Send mail
var client = mail.client_new(config)
client.send(m) catch e {
println('Mail sending failed:', e.msg())
}
client.close()
}MIT