フロントエンドとバックエンド
順番に始めましょう。フロントエンドとバックエンドとは何ですか?サイトには、それぞれ前面と内部の2つの側面があります。 1つ目は通常、ページ上のオブジェクトの視覚的な配置を担当します(どこにどの画像があり、どこにどのテキストがあり、どこにボタンがあるか)。 2番目は「アクション」を担当します。通常、これらはサイト上の同じボタンまたは他の「もの」のクリックです。たとえば、お気に入りのソーシャルネットワークのページに移動し、最初にアカウントにログインする必要があります。フロントサイド(フロントエンド)で、ユーザー名とパスワードを入力し、[ログイン]ボタンをクリックします。このとき、そのようなユーザーの存在を確認するためのリクエストがデータベースに送信され、成功した場合はアカウントのソーシャルネットワークに移動し、そうでない場合はエラーメッセージが表示されます。この場合、バックエンドは基本的にデータベースにリクエストを送信する責任があります。通常、次の3つのサブパートに分かれています。
- リクエストを受け入れるためのWebAPI
- リクエストを処理するためのビジネスロジック
- データベースとの相互作用
この記事では、主にAPIまたはアプリケーションプログラミングインターフェイスについて説明し、ビジネスロジックについて少し説明します。しかし、最初に、サーバーを作成しましょう。
独自のサーバーを作成する
これは、フラスコフレームワークを使用した最も単純なpythonサーバーアプリケーションの外観です。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello, World!"
app.run()
空のルート(「/」)はすでに1つあり、このアプリケーションを実行して127.0.0.1:5000ページのブラウザーを開くと、「Hello、World!」という碑文が表示されます。サーバー側からは、次のメッセージが表示されます
。127.0.0.1--- [07 / Aug / 2020 20:32:16] "GET / HTTP / 1.1" 200-したがって、ブラウザー(クライアント)でこのリンクに移動すると、次のようになります。サーバーへのGETリクエストで、インデックス関数に入ります。ここから「Hello、World!」が取得されます。他のルートに他のクエリ(はるかに複雑)を追加できます(または必ずしもそうとは限りません)。私が言ったように、この場合、標準のデフォルトであるGETリクエストを使用しました。しかし、他にもたくさんありますが、その中で最も人気があるのはPOST、PUT、DELETEです。しかし、なぜこれが必要なのですか?
作成読み取り更新削除
まず、RESTはREpresentational State Transfer(または、より簡単に言えば、REpresentational State Transfer)の略です。実際、REST自体の定義はそれほど重要ではありませんが、通常は別の頭字語-CRUD-Create Read UpdateDeleteに関連付けられています。最初に、データベースに関連する例を示しました。これらの4つの操作は、データベースを操作する上で不可欠な部分です(まあ、またはデータだけを操作する)。
次に、RESTまたはRESTfull APIは、これら4つのアクションの処理をサポートする必要があります。ここで、GET、POST、PUT、DELETEメソッドが役立ちます。原則として(必ずしもそうとは限りません!)POSTメソッドは、新しいデータの追加(Create)、GET-読み取り(Read)、PUT-既存のデータの更新(Update)、およびDELETE(Delete)にそれぞれ使用されます。たとえば、同じフラスコアプリケーションを次のように再設計できます。
from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["POST", "GET", "PUT", "DELETE"])
def index():
if request.method == "POST":
#
if request.method == "GET":
#
if request.method == "PUT":
#
if request.method == "DELETE":
#
app.run()
これはプリミティブRESTAPIです。フロントエンド側がリクエストを送信できるようになりました。タイプに応じて、さらにアクションを実行します。
データの操作
私たちの現在のアプリケーションはまったく面白くありません-いくつかのデータを扱うのは素晴らしいことです。これを行うには、それらを転送する方法を考える必要があります。最も一般的な方法はJSON形式です(ただし、XMLなどの他の方法を使用することもできます)。これはpythonの辞書に似ており、非常に使いやすいです。ソーシャルネットワークでの承認を伴う例として、プリミティブデータを使用します。
data = {
1: {
"login": "login1",
"password": "Qwerty1"},
2: {
"login": "login2",
"password": "Ytrewq2"}
}
これまでに2人のユーザー(login1とlogin2)がいるデータがあり、この日付をCRUDします。 4つのメソッドすべてが同じルートで機能することはめったになく、通常はこれを実行します。GETメソッド(すべてのユーザーを返す)とPOSTの場合、たとえば「/ users」のルートが使用され、GETメソッドの場合(1人のユーザーを返す)そのid)、PUTおよびDELETE「/ users / id」。また、新しいユーザーを更新および作成するために、リクエスト本文(request.json)でユーザーに関するデータを受け取ることにも注意してください。これで、プログラムを次のように書き直すことができます。
from flask import Flask, request
app = Flask(__name__)
data = {
1: {
"login": "login1",
"password": "Qwerty1"},
2: {
"login": "login2",
"password": "Ytrewq2"}
}
@app.route("/users", methods=["POST", "GET"])
def work_with_users():
if request.method == "POST":
data[max(data.keys())+1] = request.json
return {"message": "User was created"}, 201
if request.method == "GET":
return data, 200
@app.route("/users/<int:user_id>", methods=["GET", "PUT", "DELETE"])
def work_with_user_by_id(user_id):
if request.method == "GET":
return data[user_id], 200
if request.method == "PUT":
data[user_id]["login"] = request.json["login"]
data[user_id]["password"] = request.json["password"]
return {"message": "User was updated"}, 200
if request.method == "DELETE":
data.pop(user_id)
return {"message": "User was deleted"}, 200
app.run()
リクエストをテストするためのプログラムはたくさんあります(Postman、Fiddler、Insomnia ...)。そのうちの1つに慣れておくことをお勧めします(個人的には、Postmanが私のお気に入りです)。彼らの助けを借りて、あなたはリクエストの結果として何が来るのか、そしてどのステータスコード(リターン 'ahの番号200/201)で来るのかを見ることができます。また、リクエスト本文にデータを追加して、送信をステージングすることもできます。
このアプローチは現在使用されておらず、flask-restplusライブラリ(またはそれに代わるflask-restx)が通常使用されていることも注目に値しますが、最初に純粋なフラスコに精通する必要があると思います。また、データの可用性とその正確性を確認し、逆の場合にエラーが返されるようにする必要があります。
結論
REST APIは、特定のルートに沿ってサイトのクライアント側からアクセスされる単純なCRUDメソッドです。一見するとわかりにくいかもしれませんので、例を参考にして独自のサーバーを作成することをお勧めします。個人的には、フラスコはこのための最も簡単なフレームワークの1つだと思います。初心者の場合は、試してみることをお勧めします。