HTTP API ∋REST API / Realtime API = websocket

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つの設計原則
    1. セッションなどの状態管理を行わない。(やり取りされる情報はそれ自体で完結して解釈することができる)
    2. 情報を操作する命令の体系が予め定義・共有されている。(HTTPのGETやPOSTメソッドなど)
    3. すべての情報は汎用的な構文で一意に識別される。(URLやURIなど)
    4. パラメータを指定して特定のURLにアクセスするとXML(またはJSON)で応答される
    5. 情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができる。
  • リソースに対して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 接続を確立するためにハンドシェイクを完了する必要があります。

 

コメント

タイトルとURLをコピーしました