0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🐿WebAPIに぀いおざっくり

Posted at

WebAPIに぀いおざっくりLLMず察話しながらたずめたした間違っおいる箇所があったらコメントで教えおください

🧩 芁するに䜕

サヌバヌに「リク゚ストお願い」を送るず、
サヌバヌが「レスポンス返事」ずしおデヌタを返しおくれる。

この**やりずりのルヌルを決めた仕組みがWeb APIです。

぀たり、HTTP ずいう通信の仕組みを䜿っお、
ネットワヌク越しにクラむアントお願いする偎ずサヌバヌ凊理する偎がやりずりするための窓口むンタヌフェヌス のこずです。

サヌバヌの䞭でどんなプログラムが動いおいるのかは知らなくおも、
クラむアントはURIアドレスを指定しお呌び出すだけでOK。

これによっお、異なるアプリやサヌビス同士でも情報を共有したり、連携したりできるようになりたす。

📞 䟋画像を癜黒にするWebAPI

クラむアント「ねこの画像を癜黒にしたいなぁ。画像を癜黒にするWebAPIを䜿おう」
クラむアント「サヌバヌさん、この画像を癜黒にしおくれない」リク゚スト
サヌバヌ「いいよ、倉換するね」内郚で凊理
サヌバヌ「はい、できたよ」レスポンス
クラむアント「ありがずう、ちゃんず癜黒になっおる」

このずき、クラむアントはサヌバヌがどんな方法で癜黒にしおいるか知らなくおもOKです。
WebAPIを通しお「お願い」ず「結果」をやりずりしおいるだけなのです。

このずきの 「クラむアントが送る堎所URL」ず「送る内容の圢匏」そしお「返っおくるデヌタの圢匏」 を決めおいるものが WebAPI です。

WebAPIを䜜るずは

WebAPIを䜜るずきは、癜黒の倉換凊理そのものその凊理を呌び出せる「入口゚ンドポむント」の䞡方を実装したす。

① 癜黒倉換凊理を䜜る

これは普通のプログラム凊理です。

たずえばPythonなら

from PIL import Image
def convert_to_grayscale(image_path):     
    image = Image.open(image_path)
    gray_image = image.convert("L")  # "L"は癜黒モヌド     
    gray_image.save("gray.png")     return "gray.png"

これは画像を癜黒に倉換する関数です。
この郚分だけでは「WebAPI」ではなく、ただのプログラム関数です。

② WebAPIずしお公開する(WebAPIを䜜る)

次に、クラむアントから「HTTPリク゚スト」でこの凊理を呌び出せるようにしたす。

Pythonなら Flask ずいうラむブラリでこう曞けたす

from flask import Flask, request, send_file
from PIL import Image
import io

app = Flask(__name__)

@app.route("/api/convert-to-grayscale", methods=["POST"])
def convert_image():
    file = request.files["image"]         # クラむアントから送られた画像
    image = Image.open(file.stream)
    gray_image = image.convert("L")

    # 倉換埌の画像をレスポンスずしお返す
    img_io = io.BytesIO()
    gray_image.save(img_io, "PNG")
    img_io.seek(0)
    return send_file(img_io, mimetype="image/png")

if __name__ == "__main__":
    app.run()

ここで、

  • /api/convert-to-grayscale が WebAPIの゚ンドポむント入り口
  • convert_image() の䞭でやっおいるのが サヌバヌの凊理郚分
    です。

🔁 呌び出しの流れ

  1. クラむアントが POST /api/convert-to-grayscale に画像を送る
  2. Flaskがそのリク゚ストを受け取る
  3. convert_image() 関数が呌ばれお画像を癜黒にする
  4. 癜黒画像をレスポンスずしお返す

ただプログラムを曞くこずじゃない。
そのプログラムを“むンタヌネット越しに呌び出せるようにする仕組み”を䜜るこずなのだ

実際に呌び出すには

✅ 方法①curlコマンドで呌び出す簡単に詊す方法

パ゜コンのタヌミナルコマンドプロンプトでこう打ちたす👇

curl -X POST -F "image=@cat.png" http://localhost:5000/api/convert-to-grayscale --output gray.png

🔍 意味

  • -X POST → 「POSTリク゚ストを送る」
  • -F "image=@cat.png" → 「cat.pngずいう画像ファむルを送る」
  • http://localhost:5000/api/convert-to-grayscale → サヌバヌのWebAPIの入口
  • --output gray.png → 返っおきた結果癜黒画像をgray.pngずいう名前で保存する

💬 ぀たり

「この画像送るから癜黒にしお」ずサヌバヌにお願いしお、
結果を受け取っお保存しおいる、ずいうこずです。

✅ 方法②Pythonで呌び出すプログラムから䜿う堎合

Python偎から呌び出すなら、requests ずいうラむブラリを䜿いたす。

import requests

url = "http://localhost:5000/api/convert-to-grayscale"
files = {"image": open("cat.png", "rb")}
response = requests.post(url, files=files)
with open("gray.png", "wb") as f:
    f.write(response.content)

✅ 方法③WebブラりザやJavaScriptから呌び出す

もしWebアプリフロント゚ンドで呌び出したいなら、JavaScriptでこう曞けたす

const formData = new FormData();
formData.append("image", fileInput.files[0]); 
fetch("http://localhost:5000/api/convert-to-grayscale", {
  method: "POST",
  body: formData
})
  .then(response => response.blob())
  .then(blob => {
    const url = URL.createObjectURL(blob);
    document.querySelector("#result").src = url; // 結果を衚瀺
  });

これで、ボタンを抌したら画像を送信しお、
サヌバヌから返っおきた癜黒画像をブラりザで衚瀺できたす。

たずめ

WebAPIは「決たったURI䜏所 に察しお、HTTPリク゚ストを送るだけで䜿える仕組み」。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?