引用: 今、インターネットはとても熱いので、手に持っているアプリはあまり多くなく、他の人に挨拶するのが恥ずかしいです。しかし、APPは全能の神なのでしょうか?答えは「ノー」です。洗練された APP フロントエンド表示に加えて、実際にはコアはサーバー側です。データの保存、クエリ、メッセージのプッシュはすべてサーバー側でサイレントに完了します。となると、サーバーインターフェースをどう提供するかが重要な問題になります!
おそらく、今日では非常に多くのアプリがあるので、サーバーサイド API プログラムの書き方を知らない人はいないでしょう?はい、おそらくあなたは正しいですが、この記事で説明し伝えたいストーリーは、ゼロから 1 へのストーリー、思考、プロセス、そして推測できるプロセスです。
答えを与える前に、いくつか質問させてください。これらの点で自分が優れていると思うなら、おめでとうございます。あなたはすでに素晴らしい人です。参考として記事の最後にあなたの知恵の言葉を残してください、ありがとう!まだ改善の余地があると思われる場合は、ここで答えを見つけてみてください。ありがとうございます。 (注: 開発には PHP 言語を使用しますが、これは重要ではありません)
1. サービスを提供するためにどのような種類のサーバーが使用されますか (正確ではないかもしれません)。例:soap サーバー ? yar サーバー ? そうですね、これが正しい方法なので、restful スタイルを使用しているはずです。
2. アクセス元が正常であることを確認する方法、またはアクセス権をどのように管理しますか? (別紙:渡されたパラメータの取得方法)
3. 暗号化方式はありますか? https ? さまざまな場合に区別はありますか?
4. エンコードの問題を解決するにはどうすればよいですか?
5. インターフェースのバージョンの反復を制御するにはどうすればよいですか?
6. アップロードされたファイルはどのように処理しますか?
7. 注射を防ぐには? (フレームワークも使用しない場合)
8. アクセス速度を改善するにはどうすればよいですか?同時実行性を向上させるにはどうすればよいでしょうか?
それでは、質問を読んだ後、ストーリーを続けてみましょう。
前編集者: 会社は設立されたばかりの小さな会社で、Web フロントエンド、Web バックエンド、Android など 1 つのプロジェクトをほぼ 1 人で担当しています。そしてIOS。明らかに、私の仕事はサーバー側のインターフェイスを提供することです。 (私の経験も貧弱です)
質問 1. サービスを提供する方法 これらを使用してサービスを提供しようと思ったのは、私が PHP 開発を使用しているためです。 PHP にはこうしたことがあるのですから、確かに PHP と PHP プログラムの間では、soap と yar が優れているのは当然です。ただし、Android だけでなく、IOS だけでなく、モバイル接続が必要です。だから国際化するしかない!実際、Restful アーキテクチャを使用すると、1 つのアドレスだけで操作できます。心配しないでください。誰もがこの方法を行っています。それは正しいことです。 (添付: インターフェイスを提供するために完全な MVC フレームワークを使用する必要があるかどうかを検討してください)
質問 2. アクセス許可。この問題はなぜ発生しますか?自分の Web サイトの場合、アクセスするアドレスは自分で提供されるため、アクセス権を制御する必要はまったくありません。ただし、外部関係者にサービスを提供する場合は、それを考慮する必要があります。訪問者が国内からではない場合はどうすればよいですか?彼はログインしていますか?現在このサービスにアクセスしている人は何人ですか?これらのことは、一目で明確に表示される必要があります。では、訪問者をコントロールするにはどうすればよいでしょうか?方法 1. プログラムにいくつかのパスワードなどをハードコードし、クライアントがアクセスするときに検証用にこの変数を持ち込む; 方法 2. 各クライアントにソース コードのセットを提供する (Android または iOS について話しています)。など) appId、appKey を提供し、アクセスするときにそれを持ち歩きます。実際、多くの大企業がこれを行っています。Oauth などの認証方法を使用します。明らかに、方法 2 が最適な方法です。これを使用すると、効率的なアクセスを簡単に記録することもできます。 (実践: 許可テーブルを確立し、アクセス ログ テーブルを確立し、必要に応じてモジュール アクセス許可テーブル、エラー説明テーブルを確立します)
質問 3. 暗号化、一般に、インターフェース (便利) を提供するために json を使用できます。つまり、ほとんどすべてのアクセスはクリア コードで送信されるため、情報が傍受されると想定するには、特定の予防策が必要です (実際、この想定は簡単に確立されます)。一般的な情報としては、appId+appKey+accessparameters+timestamp+n 個のランダムな文字のような通常の署名を追加し、次に md5 を使用して署名を取得します。サーバーは最初に署名を検証し、確認後に後続の操作を実行します。もちろん、支払いなどの操作はまだ十分に安全ではないため、https 暗号化の助けを借りて、より安全になります。
質問 4. エンコードの問題。おそらく多くの人にとって、これは問題ではありません。しかし、私が言いたいのは、PHP でコードを書くのは非常に便利でカジュアルなことです。md5 や json_encode などはすべて言語に付属していますが、Java や Swift の場合は、それほど単純ではないかもしれません。他の人がパッケージ化したものは、わずかな間違いによって間違った署名が発生し、すべてのアクセスが無効になる場合があります。 (主に中国語が含まれる場所について話します); 当時は皆 UTF8 エディタ開発を使用していたので、大きな問題はありませんでした。
質問 5. バージョンの反復、これは問題です。なぜなら、Web サイト全体があなたのものであれば、どのような変更を加えても、他の人がアクセスできる唯一の入り口は Web サイトのアドレスだからです。しかし、モバイルアプリはそれぞれ独立しており、それぞれのバージョンが異なります。一連のインターフェイスを共有する場合、小さな変更は問題なく、下位互換性があれば十分ですが、一部の一般的な変更の場合、ユーザーに更新を促すために使用しないように強制するか、長い内容を書き続けるかのどちらかになります。過去の無駄で保守不能な冗長コード!したがって、バージョン管理が必要です。主な実装は、さまざまな内部インターフェイス アドレスを呼び出すためにバージョン パラメーターを渡すことです。もちろん、インターフェイス アドレスを別のディレクトリに直接指定することもできます。このようにして、多くのバージョンのインターフェイスを共存させることができます。 /pro/api/v1.0/xxx、/pro/api/v2.0/xxx
など。 質問 6. ファイルのアップロード。これも問題です。他の場所ではテキスト コンテンツがサーバーはデータベースを直接保存できますが、ファイルをアップロードする場合は異なります。 Web サイトの場合、通常はフォーム フォームを使用してのみ送信でき、ファイル タイプとして multipart/form-data 属性を設定して宣言する必要があります。つまり、通常の json 形式では送信できません。解決策は 2 つあります。まず、フォームの形式でファイルをサーバーに送信し、サーバーはアドレスを返します。次に、そのアドレスを他のオプションと組み合わせて、JSON として送信します。方法 2: コンテンツ全体が Web フォームの形式で送信されます。このタイプのページでは、権限の問題が個別に処理され、偽造リクエストであるかどうかに注意してください。ページに非表示のトークン検証を追加することもできます。
質問 7. インジェクションの防止。開発者としてこれを言うのは低すぎるかもしれませんが、実際、インターフェイスが何をしなければならないかは非常に重要なので言及せずにはいられません。非常に簡単です。データを受け入れ、データを保存し、ステータスを返します。したがって、肥大化した成熟した大規模なフレームワークを使用する必要はないと本当に感じています。そうすれば、注入の問題を解決できるのはあなただけです。 PHP はフィルタリングに mysql_real_escape_string と htnlspecialchar を使用しますが、基本的にはこれで十分です。
質問 8. インターフェースのアクセス速度は非常に重要です。アクセス速度が非常に遅いにもかかわらず、ユーザーはそれでも喜んで使用するアプリを見たことがありますか?重要なのは、数秒で開くことです。さまざまな検証とさまざまなログ記録により、多くの時間が費やされているため、効率の問題にさらに注意を払う必要があります。インデックス、キャッシュ、ロードバランシング、分散、それを使用します。 。 。 はは、広すぎます
最初からインターフェース一式が完成するまで、1ヶ月以上かかりましたが、まだまだ至らない点が多いと感じています。あとはメッセージプッシュをする準備をしましたが、長時間接続すると何らかの理由でプロジェクトが中断されてしまい、元も子もありません。
その時の過程を少し書いて、ちょっとした収穫だと思ってください。やり始めた頃は参考資料が少なくて自信が持てないことが多く、感覚だけを頼りにやっていたのを今でも覚えています! !この記事がこの時期に誰かの助けになれば幸いです。
批判、修正、質問は大歓迎です。