Open4

Rustで文字列を絵文字にして画像を返すREST APIを作る

ひでまるひでまる

実装しようと思い立った理由

axumを使って何かを作りたかったから。

発想のソース

ねじわささんのMisskeyの絵文字Bot
@emoji@don.nzws.me

仕様

  • 300文字以内
  • 改行を1文字としてカウント
  • 絵文字や記号は出力しない
  • フォントは予め用意されている物を指定可能
  • 文字色は指定可能。指定されていない場合はランダム
ひでまるひでまる

実装につき

言語

Rust

技術

  • axum (REST API)

API仕様

  • 通信は基本JSON
  • 画像を生成したらstatic
  • GETとPOSTどちらも実装する

GETの場合

URLをこのような形にする
生成した画像を返す
isbase64パラメーターがある場合はbase64エンコードした文字列を返す

  • 形式
http://127.0.0.1/v1/generate?text={300文字以内の文字列(改行コード含む)}&font={フォント名}&color={hexカラーコード}&height={縦(px)}&width={横(px)}&isbase64
http://127.0.0.1/v1/generate?text=こや〜ん&font=rounded_mplus&color=#0f0f0f&height=1200&width=4096

POSTの場合

JSONで通信
生成した画像の保存先を返す

http://127.0.0.1/static/abcdefg.jpeg

isbase64がtrueの場合はbase64エンコードした文字列を返す

  • 形式
{
  "text": "{300文字以内の文字列(改行コード含む)}",
  "font": "{フォント名}",
  "color": "{hexコード}",
  "height": "{縦の長さ}",
  "width": "{横の長さ}",
  "isbase64": "{true or false}"
}
{
  "text": "こや〜ん",
  "font": "rounded_mplus",
  "color": "#0f0f0f",
  "height": 1200,
  "width": 4096,
  "isbase64": false
}

パラメーター及び変数名

text (string) (必須)

  • 絵文字の元の文字列
  • 指定がない場合、もしくは空欄な場合は400を返す

font (string)

  • デフォルト値 Rounded M+
指定可能フォント

フォント名 指定方法

  • Rounded M+ rounded_mplus
  • IPAmj 明朝 ipa_mincho
  • Noto Sans JP noto
  • ラノベ POP lanove_pop

color (string)

#0f0f0fの形で送信

  • デフォルト値 ランダム
  • hexカラーコード

height (int)

  • デフォルト値 512
  • 画像の縦の長さ
  • 最大値 4096

width (int)

  • デフォルト値 512
  • 画像の横の長さ
  • 最大値 4096

isbase64 (boolean)

base64したエンコードを返すか否か