Flask APIは、JSONファイルをシンプルなHTML + JS + CSS Webアプリケーションに提供し、安全に保ちます


8

テーブルにいくつかのデータを表示する単純なWebアプリケーションを作成しました。これは毎週更新されます。

この更新は、SQLiteデータベースに配置する前に、一部のデータをスクレイピングおよび変更するPythonコードを使用してバックエンドで行われました。

いくつか読んだ後、そのデータをウェブアプリに配信するには、Flaskを使用してAPIを作成する必要があることを学びました。これにより、そのデータを取得してJSONの形式でウェブアプリのJSに配信し、データを使用してテーブル。ただし、ユーザー名とパスワードでAPIを保護する必要があります。しかし、APIからデータを取得するJSフロントエンドとして、ユーザー名とpwをJSにハードコード化する必要があるため、ユーザーが読み取ることができるため、実際には意味がありません。(おもう)

私は自分のAPIをすべての人に公開する必要がありますか、それともSQLiteデータをWebアプリケーションのバックエンドとして使用できるようにするための方法ではありませんか?私はAPIをGETのみに維持することに問題はありません。


1
ユーザーはウェブサイトにアクセスしたときに認証されますか、それとも誰もがサイトにアクセスできるGoogleのようなものですか?個人的には、なんらかの認証なしにAPIを公開することはありません。
ダニエル・バトラー

1
ミゲルのこの答えはあなたの質問に深く答えるようです。私は彼がフラスコに精通している著者を強くお勧めします。
ダニエルバトラー

@DanielButler 2つのコメントありがとうございます。私が念頭に置いているサイトは、すでに公開されているいくつかのデータの集計を示す表です。リンクをお読みいたします、ありがとうございます。
-bjornasm

回答:


2

あなたは正しい、あなたのAPIを保護することは無意味です。APIの保護は、特定の状況でのみ必要です。

誰にも見せたくないデータに、おそらくバックエンドの呼び出しを介してアクセスしている場合は、何らかの形のセキュリティ(通常、リクエストヘッダーのAPIキーまたは認証トークン)を追加することは理にかなっています。

ただし、フロントエンド(クライアント側)からバックエンドAPIへの呼び出しを行っている場合、ユーザーはすでにリクエストを確認でき、APIが返すデータにすでにアクセスできるため、セキュリティを追加しても意味がありません。 -それを確保することによって、あなたは何も達成していません。

通常、ユーザーがアクセスしているページに、誰にも見せたくない機密データが含まれている場合は、代わりにWebサイトを保護する手順を実行します(たとえば、そのページにアクセスする前に、ユーザー名とパスワードでログインして保護する)。 。Webサイトがユーザー名とパスワードで保護されているこのアプローチを採用する場合、APIを更新して、ユーザーが認証されていないリクエストに応答しないようにすることができます(たとえば、セッショントークンまたはログインしている各ユーザー)。

利用可能な無料データがたくさんあるウェブサイトを見て回ると、それらすべてに完全に保護されていないフロントエンドAPI呼び出しがあることがわかります(データがすでに無料でアクセスできるのは無意味だからです)。一部のWebサイトは、APIを呼び出しているのが自分のWebサイトであることを確認する手順を実行しますが、それでもWebスクレイパーは常にHTMLからデータを抽出できるため、少し無意味です。


1

見てみましょうこのページの認証ヘッダを概説します。このより簡単な方法は、Flaskのヘッダー情報をハードコーディングして、もう少し安全にすることです。データベースからヘッダー情報を読み取る、より複雑なルートを試すこともできます。postgres dbから読み取るために私が現在機能しているものは以下のとおりなので、sqlite用に少し変更することができます。

def valid():
  headers = request.headers
  auth = headers.get("X-Api-Key")
  user = User.query.filter_by(apikey=auth).first_or_404()
  print('from search of db ',user,'',auth)
  return str(user)

0
  1. あなたが述べたように、あなたは公開データを表示することを計画します-そして、それは認証なしでも使用することができます。それ以外の場合は、不必要な時間がかかりすぎると思います。
  2. データベースからの単純な単一のテーブルしかないので、APIは必要ないと思います。HTMLテンプレートを作成して、それをデータとともにレンダリングするだけです。いくつかの例がここにあり、他のいくつかはここにあります
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.