1
4

More than 1 year has passed since last update.

オレオレサイト内通貨を作るAPIを作りました

Posted at

はじめに

PS: この記事は1年以上熟成されたまま、放置されていた記事ですもはや何も詳細を覚えていません

個人的に作っている、あるサイト内でのみ使える専用通貨機能を作りたい。
そのサイトはLINEで使えるBotと今後連携したいので、あらゆる機能はAPIで提供されるようにしたい。
こういう機能は色んなサイトで見かけるし、どっかで公開されてるのではと思ったが、
それっぽいことができる単独のAPIはざっと調べた限り見当たらない。
なので作ってみることにしました。

※以下、サイト内専用通貨を お金 と呼びますが、リアルマネーではありません。

説明要らないからコード見せてって方向け

使用したもの

Python3.6
FastAPI
SQLAlchemy

ブロックチェーン技術を使わない理由

Ethereumとかのフォークで自作通貨が作れるってのは昔聞いたことがあるんですが、
どうにも構成がめんどくさそう(つまり面倒)、そして個人サイトで使うのでどうせ中央集権
ってことで普通のAPIを作ります。

Pythonな理由

自分が使い慣れてて簡単に作れそうだからっていうところからです。

FastAPIな理由

どうもPythonの中では速い(参考)ようなので 速さは正義ってことから。
今まではFlaskで書いてたんですが、まぁなんとかなるでしょう。

SQLAlchemyな理由

今までSQLを直書きしてきた反省から導入。
ORMは色々あるようですが、周りでよく聞くのがこれだったので。
ORM使うの初めてなのですが、SQLiteでもMySQLでも同じような書き方ができるそうです。
便利そうですね。

作業環境

VSCode
Windows 10

動作環境

RaspberryPi 3B
Apache2
gunicorn

できる機能

  • ユーザーは お財布を1つ作れる
  • ユーザーは お財布に通貨を持てる
  • ユーザーは 他のユーザーに通貨を渡せる(メッセージも付けれる)
  • ユーザーは 取引履歴を取得できる
  • ユーザーは 自販機から商品を購入できる
  • ユーザーは 購入した商品一覧を取得できる
  • ユーザーは 所持しているお金のランキングを確認できる
  • 管理ユーザーは 商品を販売する自販機を作れる
  • 管理ユーザーは 一定期間毎にお金を配るものを作れる
  • 管理ユーザーは 取引に手数料を指定できる
  • 管理ユーザーは すべての取引履歴を取得できる
  • 管理ユーザーは ユーザーの財布を操作できる

機能を元に定めたAPIエンドポイント

ユーザー

  • /user/wallet/new POST
  • /user/wallet GET
  • /user/wallet/ranking GET
  • /user/transaction/new POST
  • /user/transaction GET

自販機

  • /machine/list GET
  • /machine/ GET
  • /machine/ PUT
  • /machine/ DELETE
  • /machine//product GET
  • /machine//product PUT
  • /machine/new POST

商品

  • /product/list GET
  • /product/new POST
  • /product/ GET
  • /product/ PUT
  • /product/ DELETE

各作成のエンドポイントを
createにするかnewにするか、なしで直接POSTするか迷ったんですが
個人的にわかりやすいcreateにしました。(どうするのが適切なんだろう)

参考にしたサイト

SQLAlchemyの使い方

https://it-engineer-lab.com/archives/1183
https://qiita.com/tomo0/items/a762b1bc0f192a55eae8
https://qiita.com/ariku/items/75799665acd09520bed2

FastAPIの使い方

https://qiita.com/bee2/items/75d9c0d7ba20e7a4a0e9
https://fastapi.tiangolo.com/#example

FastAPIでの認証の作り方

こちらのサイトを参考にしました
https://www.blog.umentu.work/fastapi-bearer-jwt/
https://github.com/umentu/fastapi_bearer

思い出したサイト

なんとかPay とかありましたね...
https://xn--pay-k73byfl10a.com/

最後に

なんか学校の授業とかでやらされそうなものができてしまった気がする。
どこかの学校の授業課題のお手伝いになれば幸いです(??)

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4