algo_rism
@algo_rism

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

APIの認識があっているか教えてください (Djangoを例に使っています)

聞きたいこと

エンジニアでもなんでもないので、的外れかつ低レベルな質問をしていても優しくしてください....

現在バックエンドをdjango, フロントをhtml, css(bootstrap), jsで簡単なアプリを作っているのですが、フロントをvue.jsで書き換えたいと思い、その際にDjango Rest Frameworkを見つけました。アプリをapi化するためのフレームワークだと思うのですが、api化をするという認識が僕の中であっているかわからないので質問させてください。
<質問>
①通常のdjangoのviewは、requestを受け取って特定のhtmlに値を渡し、htmlにその値を埋め込むという流れですが、これを単にhtmlに渡すだけでなく、様々なフロントのフレームワークにjson形式などのフォーマットで受け取れるようにするということでしょうか。

②①だとすると、フロントをreactとかで書きたいときに、通常のdjangoをバックエンドとして書くことは不可能ということですか。

1

3Answer

結論から話すとバックエンドでdjangoを使ってAPIを返せばReactを使用することができます。

djangoのviewがどのようになっているかは分かりませんが、一般的なHTML表示だとバックエンドからリクエストを受け取ってそれを表示しているだけになります。

APIとして使用する場合は、レスポンスをJSON形式にしてバックエンドのURLからリクエストを受け取りReactなどのフレームワークで表示するのが主な流れになります。
そのため、バックエンドの言語やフレームワークによってフロントのフレームワークが制限されることはありません。

2Like

「Django Rest Framework」をキーワードにググれば山ほど参考になる記事がヒットします。質問する前にそういうことは当然やったと思いますが、そこに答えは見つからなかったのですか?

自分がググってみて、ぱっと見初学者向けに分かりやすかったのは以下の記事。

Django REST Frameworkとは?
https://zenn.dev/hathle/books/django-drf-book/viewer/01_drf

①通常のdjangoのviewは、requestを受け取って特定のhtmlに値を渡し、htmlにその値を埋め込むという流れですが、これを単にhtmlに渡すだけでなく、様々なフロントのフレームワークにjson形式などのフォーマットで受け取れるようにするということでしょうか。

上に紹介した記事の「RESTful API」のセクションを読んでください。図を使って詳しく初心者が分かるように説明してあるので、ここのような Q&A サイトで聞いて答えをもらうよりはるかに理解が容易なはずです。

それを読んでも分からなければ、何が分からないのかをここで聞くのが良いと思います。

②①だとすると、フロントをreactとかで書きたいときに、通常のdjangoをバックエンドとして書くことは不可能ということですか。

何故不可能だと思うのですか?

「フロントをreactとかで書きたいとき」はバックエンドは json 応答を返すのが必須で、「通常のdjango」ではそれができないと思っているから? そんなことはないですよ。

0Like

初学者向けの説明をするなら、下記のような説明になります。

APIってどういう意味なの?

APIというのは、URLのアクセスがトリガーとなっている一連の処理のことを表します。

アクセス後のレスポンスに関しても開発者が自由にできて色々なことができたりします。

色々なことができる代わりに、セキュリティリスクが高かったりするので設計するときはセキュリティを意識して設計することが大切です。

プログラム的には、URLの割り当てられたメソッド/クラスのレスポンスがマークアップ言語以外のものって認識でいいと思われます。(フレームワークに依存するため、新しいフレームワークを利用するときは勉強しなおしましょう)

具体的にどのようなセキュリティを意識したらいいの?

セキュリティの要件によって変わりますが一般的には下記のようなことを意識する必要があります。

WEBAPIを利用する対象の方だけが利用できるようにするアクセス制御(ホワイトリスト)
ものによってはDoS攻撃などの対策が必要だったりします。

0Like

Your answer might help someone💌