WebAPI&HTTP基礎編
DiscordBot が使っている DiscordAPI の話
- https://discord.com/developers
- discord.com -> ヘルプ -> デベロッパー向け
- discord.py や discord.js が DiscordAPI を使っています
APIとHTTPの概要の解説(10分)
- WebAPIとは
- Web上のHTTPに準拠したAPI
- APIとは
- Application Programming Interface
- HTTPとは
- Hypertext Transfer Protocol の略
- HTTP リクエストメソッド
- GET: データを取ってきてほしい時に使う
- POST / PUT: データを送る時に使う
- DELETE: データを削除してほしい時に使う
- HTTP レスポンスステータスコード
- 実行した結果がどうなったかを教えてくれる
- 数字に意味付けられている
- 403: 権限が無い時
- 404: 存在しない時
- GET したら基本は 200 が返ってくる
- HTTP ヘッダー
- 込み入った話なので今回は割愛
PythonとJavaScriptを使って色んなAPIを使ってみる(15分)
requests を使って API を使ってみる
pip install requests
をしておく
import requests
from pprint import pprint
URL_API = 'https://qiita.com/api/v2'
res = requests.get(f'{URL_API}/tags')
pprint(res.json())
aiohttp を使って API を使ってみる
from discord import Intents
from discord.ext import commands
import os
import aiohttp
bot = commands.Bot(
command_prefix=commands.when_mentioned_or('/'),
help_command=None,
intents=Intents.all(),
)
token = os.environ['DISCORD_BOT_TOKEN']
@bot.command()
async def test(ctx):
async with aiohttp.ClientSession() as session:
async with session.get('https://qiita.com/api/v2/tags') as res:
tags = await res.json()
await ctx.send(tags)
bot.run(token)
実際にAPIを作って使ってみる(15分)
作る時
- Web フレームワークを使うと楽
- Python だと FastAPI が一応流行ってるらしい(他には Flask, Django REST Framework とかがある)
- JS は Express.js
FastAPI 解説
- コード
from fastapi import FastAPI
# アプリケーションの初期化
app = FastAPI(
title='FastAPI Heroku Template',
description='HerokuでFastAPIによるWebAPIを作成するためのテンプレート',
docs_url='/'
)
# /api/ に GET リクエストが送られた時の処理
@app.get('/api')
def get_sample() -> str:
return 'sample' # 返したいデータを return する
# /api/post/ に POST リクエストが送られた時の処理
@app.post('/api/post')
def post_sample(sample: str): # 送ってほしいデータを引数に入れる
# 変数名が JSON のキー, アノテーションされている型が欲しいデータの型
return sample
- API の仕様書を自動で作ってくれる
- uvicorn を使うと、いい感じに動かしてくれる
- uvicorn
- Python のサーバーフレームワーク
- 非同期処理に対応
- uvicorn