HTTP(Hypertext Transfer Protocol)
HTTPでは、要求メッセージをHTTPリクエスト、応答メッセージをHTTPレスポンスと呼びます。
リクエスト(要求)
別な言い方をすると注文。クライアントからサーバに送る。
よくあるのはデータが欲しいとか、データを保存してとかをリクエストする
以下リクエストの中身。
- URL
- メソッド
- GET:サーバへデータの要求
- POST:サーバへデータを送る
- 他にもPUT、DELETEとかあるよ
レスポンス(反応)
別な言い方をすると結果。リクエスト受けたサーバがクライアントに返す。
リクエストされたデータの中身とか、登録した結果など。
以下レスポンスの中身。
- ステータスコード(成否とかを数字で表現している)
- 200:成功
- 400:リクエストが不正
- 500:サーバのエラー
- コンテンツ(html)
REST API
要するに、ここにアクセスするとこれを返します
bitflyerのpublic APIはまさにこれだわ
REpresentational State Transfer
- RESTの4つの設計原則
- セッションなどの状態管理を行わない。(やり取りされる情報はそれ自体で完結して解釈することができる)
- 情報を操作する命令の体系が予め定義・共有されている。(HTTPのGETやPOSTメソッドなど)
- すべての情報は汎用的な構文で一意に識別される。(URLやURIなど)
- パラメータを指定して特定のURLにアクセスするとXML(またはJSON)で応答される
- 情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができる。
- リソースに対してURLが対応づけられる。=同じURLからは同じ結果が得られる(状態やセッションに依存しない)
#資産残高を取得 def get_balance_api(): #API keyとAPI secret api_key = "***********************" api_secret = b"**************************************" #エンドポイントURL endpoint = "https://api.bitflyer.jp" ''' 【認証情報の作成】 認証情報は、4つの情報から作成されます。 タイムスタンプ、送信方式(GET・POST)、パス、API Secretです。 そのうち、タイムスタンプ、送信方式(GET・POST)、パスを一つのテキストにします。 できあがったテキストとAPI Secretを使って、ハッシュ化されます。 hmacというハッシュ化アルゴリズムを使っている、程度の認識で大丈夫です ''' method = "GET" path = "/v1/me/getbalance" timestamp = str(time.time()) text = timestamp + method + path sign = hmac.new(api_secret, text.encode('utf-8'), hashlib.sha256).hexdigest() ''' 【ヘッダーの情報】 認証情報は、リクエストのヘッダー情報につけて送ります。 ヘッダーは辞書型でACCESS-KEYとACCESS-TIMESTAMPとACCESS-SIGNとContent-Typeを送ります。 ACCESS-KEY : 送り主のアカウントを特定 ACCESS-TIMESTAMP : API Secretをハッシュ化するために使用(bitFlyerサーバー側が使用) ACCESS-SIGN : ハッシュ化された認証情報 Content-Type : json形式であることを知らせてい ''' headers = { 'ACCESS-KEY': api_key, 'ACCESS-TIMESTAMP': timestamp, 'ACCESS-SIGN': sign, 'Content-Type': 'application/json' } #リクエストを送って、レスポンスを受け取る response = requests.get(endpoint + path, headers=headers) print(response) response = response.text return response response = get_balance_api() print(response)
Realtime API = websocket
wss://ws.lightstream.bitflyer.com/json-rpc
プロトコルがHTTPでないWSSだ
WS:は WebSocket 接続用の新しい URL スキーマです。セキュリティで保護された WebSocket 接続用の wss: もあります。これは、https: がセキュリティで保護された HTTP 接続に使用されるのと同じです。
WebSocket は双方向通信プロトコルであり、これが HTTPの大きな違いの 1 つです。 接続が確立されると、WebSocket サーバーとクライアントは、Socket のように相互にデータを送受信することができます。 WebSocket サーバーとクライアントは、WebSocket 接続を確立するためにハンドシェイクを完了する必要があります。
コメント