RESTAPIとは

リモートで言えば、RESTAPIはWebサイトを作成するために必要です。しかし結局のところ、これには多くのことが必要です(あなたが言う)-REST APIのどの部分ですか?



フロントエンドとバックエンド



順番に始めましょう。フロントエンドとバックエンドとは何ですか?サイトには、それぞれ前面と内部の2つの側面があります。 1つ目は通常、ページ上のオブジェクトの視覚的な配置を担当します(どこにどの画像があり、どこにどのテキストがあり、どこにボタンがあるか)。 2番目は「アクション」を担当します。通常、これらはサイト上の同じボタンまたは他の「もの」のクリックです。たとえば、お気に入りのソーシャルネットワークのページに移動し、最初にアカウントにログインする必要があります。フロントサイド(フロントエンド)で、ユーザー名とパスワードを入力し、[ログイン]ボタンをクリックします。このとき、そのようなユーザーの存在を確認するためのリクエストがデータベースに送信され、成功した場合はアカウントのソーシャルネットワークに移動し、そうでない場合はエラーメッセージが表示されます。この場合、バックエンドは基本的にデータベースにリクエストを送信する責任があります。通常、次の3つのサブパートに分かれています。



  1. リクエストを受け入れるためのWebAPI
  2. リクエストを処理するためのビジネスロジック
  3. データベースとの相互作用


この記事では、主に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つだと思います。初心者の場合は、試してみることをお勧めします。



All Articles