
最近、WEBアプリの仕組みについて気になっています。
Youtubeなどの動画配信ソフトなどはRestAPIでクライアントとサーバで通信されていますか。
例えば、Youtubeで検索したら
①ブラウザからリクエストを投げる APIでGET?認証していたら、認証情報も一緒に送る。
②レスポンスとして、ユーザにおすすめの検索一覧の動画が出てくる。
Bodyには、画像情報が入っている。
③サムネをクリック(ここも、APIでリクエスト)
④レスポンスで動画ファイルが送られてくる。
⑤動画が再生
というAPIですべてやり取りされていると思っています。
そもそも、YoutubeなどのWEBってAPIでやり取りしていますか
サーバに直接行って、サーバ側でそのユーザ情報を持っていると、サーバがパンクしそうなので、
RESTAPIでやり取りしてるのかなっと思っています。。
また、APIでやり取りしている場合に、動画などのサイズがでかいファイルなどを返すことって可能なんですか?4Kなどあり、テキストしか返せないイメージがあります。
No.1ベストアンサー
- 回答日時:
YouTubeの仕様については公開されておらず、Webページのソースコードや公開情報を基に確認した内容を回答します。
これは2022年2月現在の時点での仕様であり、変更前の仕様や、非対応ブラウザでの挙動は確認していません。
①YouTubeがREST APIを用いて通信しているか。
REST APIを用いているのは間違いありません。例えばシークバーの操作や早送り、リアルタイムのコメント送受信等、ユーザがリクエスト(要求)した操作に対してレスポンス(結果)が即座に画面に反映されるものは、すべてRESTを用いたものです。(昔はFlash Playerを使用していました)
②動画データの配信をREST APIで行っているか
YouTubeの場合はRESTを使用しています。
が、使用しなくても動画の配信は可能です。
・使用しない場合
近年の動画再生においてはHTTP Live Streaming(HLS)という技術を用いています。バージョンの新しい、主要ブラウザでのみ使用可能です。
「主要ブラウザ」と言ったのは、古いバージョンのブラウザなどはHTML5に対応しておらず、HLSを使用することができません。
これはHTML5の標準機能です。videoタグを解析してサーバ上の動画ファイルを指定し、ストリーミングを行います。
以下のようなHTMLソースで記述ができます。
<video controlslist="nodownload" src="hoge.mp4"></video>
これは、imgタグと同じように「サーバ上のhoge.mp4をここに映し出せ」という命令です。つまりサーバはRESTなどとは関係なく、ブラウザがHTMLを解析した時点で動画を配信しています。ここで重要なのは、データの配信は中断できない、ということです。
気になるようであれば、以下リンクが詳しいです。
https://developer.mozilla.org/ja/docs/Web/HTML/E …
・YouTubeの場合
ソースコードを見ていると、上述のvideoタグでこのような記述がありました。
<video controlslist="nodownload" src="blob:https://www.youtube.com/難解な文字列"></video>
blobとは、バイナリデータ(ファイルを0と1で表したもの)を構造化した、データの集まりのことです。
YouTubeはこのblobをvideoタグで解析させています。このblobにはデータを分割するポイントや、4KやUHDなどの各フォーマット、字幕などの設定が含まれています。
すなわち、RESTによって操作しやすい効率的な動画を配信しています。
動画の分割ポイントなどの情報があれば、動画を止めてブラウザを閉じても分割ポイントまでのデータしか配信されないわけです。
③テキスト以外の巨大なデータをHTTP(あるいはREST)で送受信できるか
可能です。
上述しましたが、どのようなデータでも、バイナリ、すなわち1と0の文字列で表すことができます。そして、分割して送ることができます。
これを理解するためには、HTTPヘッダなどの知識が多少必要になってきます。
HTTP通信では、MIMEタイプというものを使用してデータの形式を指定します。
詳しくは以下リンクをご覧ください。
https://developer.mozilla.org/ja/docs/Web/HTTP/B …
Webアプリケーションは奥が深く、進化も早いものです。
理解するためには時間がかかると思います。また、勉強してもすぐに新しい技術が生まれるので生涯学習することだらけです。
ぜひ、勉強を頑張ってください。
色々知らない世界が詰まってました。
やはり、Restが主流のようですね。
今まで、文字列をjson形式で返すようなイメージしかなく4k動画などの膨大な01の羅列もBodyで返していくのは想像もつきません。。
めちゃくちゃ詳しく説明いただきありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サーバーというのとメインフレ...
-
DNSサーバを設定したのですがns...
-
ワークグループ設定のPCの名前解決
-
”Tortoise SVN” と ”Subversio...
-
「DNSサーバーを自動的に取得す...
-
Linux の NTPクライアント設定...
-
マネージャ・エージェントモデ...
-
HULFTのコード変換について
-
Legacyサーバとは何ですか?
-
notes のメールがループし送れ...
-
rsyslogでログが遠隔で取得でき...
-
PPPoEサーバが複数ある場合
-
rshで途中で切断されるのは何故
-
同じ独自ドメインを2つのサーバ...
-
掲示板に投稿する際に投稿時刻...
-
サーバルームの空気を換気したい
-
プロキシサーバとDNSサーバにつ...
-
Windows7のIISでFTPサーバ動作...
-
ロリポップメーラーで受信のメ...
-
自宅サーバー/専用サーバー/...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サーバーというのとメインフレ...
-
「DNSサーバーを自動的に取得す...
-
DNSサーバを設定したのですがns...
-
”Tortoise SVN” と ”Subversio...
-
ワークグループ設定のPCの名前解決
-
複数IPアドレスによるサーバ運...
-
APバッチサーバとWebAPサ...
-
サーバルームの空気を換気したい
-
HULFTのコード変換について
-
gitとgiteaの違いについて
-
同じ独自ドメインを2つのサーバ...
-
別サーバに構築したApache+Tomc...
-
CPIの共用サーバで「Let's Encr...
-
notes のメールがループし送れ...
-
ntpサーバの置き方
-
掲示板に投稿する際に投稿時刻...
-
ADサーバのスキーマ拡張の影響...
-
モニターなしのサーバとはどん...
-
LinuxからWindowsのbatファイル...
-
subversion の通信、レスポンス...
おすすめ情報