近いうちに、Windowsタブレット(通常のWindowsPCと変わりませんが。。。)を使った業務系アプリケーション(工場で利用する想定)を開発します。
そこで、クライアント端末側で直接データベースに接続するか、
サーバー側でWEBAPIを作り、サーバー側で処理を行い結果をJSON等で返却するようにしようか悩んでいます。
皆様なら、どういう構成にしますか?
メリット・デメリット等あると思いますが、理由も併せてご回答いただけると嬉しいです。
★ クライアントの構成
OS:Windows 10
開発言語:C#(WPFで作成予定)
★サーバーの構成
OS:Linux(Cent OS)
フレームワーク: ASP.NET MVC Core
データベース: PostgreSQL
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
工場で使うアプリということで、ユーザー数は少ないと思います。
もしユーザーが多く負荷が高い場合は「Web APIを作り、Webサーバー側で処理を行い結果をJSON等で返す」が良いでしょう。
- Web APIにすると同じクエリに対する結果のキャッシュが簡単(高速&DB負荷低減)
キャッシュが全く効かないようなアプリの場合、高速化/負荷低減のメリットはないので直接DBにアクセスした方が良いように見えます。
もしセキュリティが重要ということであればWeb APIが良いかも知れません。
- Webサーバーを経由することにより、DBサーバーへの直接アクセスを防止できる。
-- APIを経由することによりDBに対する操作を制限できる。
-- DBサーバーへの直接ログインを無くせる。(PostgreSQLにも稀に権限昇格などの脆弱性がある)
- ユーザー管理/責任追跡/否認防止はWebアプリの方が簡単かも知れない。
-- 直接DBに接続でき、DBのユーザーIDが漏洩した場合、簡単に何でも出来てしまうかも知れない。PostgreSQLの脆弱性はありまり多くありませんが、時々見つかっています。ユーザー権限(アクセスできるテーブルなど)管理の手間も無視できないかも知れない。
-- セキュリティ要素として責任追跡/否認防止が必要な場合、DBサーバーにシステムユーザー毎にDBユーザーアカウントを作ることになる。PostgreSQLで多数のユーザーを管理するのは結構手間になるかも知れない。
- Webサーバーを経由する方が可用性を維持し易いかも知れない。(ホットスタンバイの切り替えなど)
システム要求仕様が不明なのでほとんど「かも知れない」です。これらが重要な場合かつWeb APIの方が都合が良い場合はWeb APIにした方が楽だと思います。
もし、直接DBに接続する方が色々と都合が良い(既に直接DBアクセスするアプリがあり、DBユーザーの管理をきっちりやっている等)場合は直接DBに接続する方が良いと思います。
投稿2017/06/27 08:39
総合スコア51
0
サーバー側が Linux、ASP.NET Core、PostgreSQL ということなのでいろいろ制約がありそうですが(Core で使えるプロバイダがあるのかとか?)、それを考えなければ、
Client (Borwser) ⇒ Web Server(ASP.NET MVC Core)⇒ DB Server (PostgreSQL)
という構成が良いと思います。
メリットは、
(1) アプリは全てサーバー側で管理可(クライアントのアプリの保守は不要)
(2) クライアントはブラウザさえあれば Windows 端末でなくても OK
・・・と言ったところでしょうか。
デメリットは、クライアントを WPF にするのに比べれば、なさそうに思います。
上に「いろいろ制約がありそう」と書いた件については、PostgreSQL には触ったこともない自分は知識がないのですが、ASP.NET MVC Core と PostgreSQL の間を取り持つプロバイダ / ドライバが完備しているかということが一番気になるところです。
(.NET Framework ベースなら Npgsql というものが用意されていて Entity Framework も使えるそうですが・・・)
Core で使えるプロバイダ / ドライバがないということですと、以下のような構成にせざるを得ないと思います。
Client (.NET + WPF + Npgsql) ⇒ DB Server (PostgreSQL)
投稿2017/06/23 00:50
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/06/23 01:11
退会済みユーザー
2017/06/23 02:06 編集
0
ベストアンサー
WPFでアプリを書くならダイレクトにDBにアクセスする方が楽ですよとコメントするところですが、PostgreSQLだとNpgsqlを使うことになると思うので、素直に定番の環境でWebAPIを書いた方がよいかもしれませんね
ハマりどころが少なくなるのではという意味で
あとWebAPIを使うと(特にJSON)型情報を持ちまわるのに面倒だったりすることがありますね
そういう意味ではWCFが使えると相当楽ですけど
あまり聞かない=知見が少ないなので、ハマるといろいろ自分でやらないといけない
→業務アプリケーションは定番構成を選択しておいた方がいいと思いますよ
もちろんいろんな挑戦を否定するわけではありません
投稿2017/06/22 21:09
総合スコア3939
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/06/23 01:13
退会済みユーザー
2017/06/23 01:14
退会済みユーザー
2017/06/23 01:23
退会済みユーザー
2017/06/23 01:46
退会済みユーザー
2017/06/23 02:13
2017/06/23 08:42
退会済みユーザー
2017/06/23 09:35
0
入出力の一元管理や定番のセキュリティで済む、WEBAPIでいいんじゃないですかね。
機能限定版を、Webで作ってというのも対応できますし。
UWPでは、WEBAPIのみなので、それが時代の潮流なんだと思います。
(安いWinタブレットはUWPのみとかこれからありそうですし)
投稿2017/06/22 15:28
編集2017/06/22 18:20総合スコア1984
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/06/22 23:50
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/06/27 11:27