さまざまな業種の企業が API を使用して、アプリのクライアント側とサーバー側の間の通信を可能にし、サードパーティ ソフトウェアと統合し、外部アプリが自社のシステムにアクセスできるようにします。さらに、カスタム API の構築と収益化は、ビジネス開発戦略の重要な部分になる可能性があります。
API がプロジェクトで重要な役割を果たす場合、その開発要件は厳格になる可能性があります。技術的な課題に対処する方法、どのプロトコルを選択するか、一流の API 中心の製品を構築するにはどのようなプラクティスを適用するかを知る必要があります。次のガイドは、これらの質問に答えることを目的としています。
まず、プロジェクトに最適なプロトコルを特定できるように、さまざまな種類の API とその開発機能を調べてみましょう。 Node.js 、Python、Ruby など、API 開発にどのプログラミング言語を選択するかに関係なく、プロトコルの種類がより重要です。現在、カスタム API 開発における主なアプローチは、REST、GraphQL、gRPC です。
REST (Representational State Transfer とも呼ばれます) は、ステートレスな API を指します。つまり、各リクエストは、そのリクエストを完了するために必要なすべての詳細を保持します。バックエンド開発者の大多数は REST API 開発に精通しています。これは最も頻繁に使用され、多用途なタイプの API であり、多数のソフトウェア プロジェクトで利用されています。 REST API は参入障壁が低い単純なプロトコルであるため、将来サポートの問題に直面する可能性は低いです。
REST を使用すると、何をどのようにリクエストしているのかが明確になり、どのような応答が期待されるのかがわかります。エラーにも同じことが当てはまります。いつでもステータス コードに基づいてエラーを特定できます。また、クライアント側でエラーをより理解しやすくするために、カスタム要素を使用してこのプロトコルをアップグレードすることもできます。
REST の利点:シンプルさ、速度、クライアントとサーバー間の明確な関係、応答のキャッシュの容易さ、組み込みのセキュリティ機能。
欠点: サーバーの標準化された応答による柔軟性の欠如。たとえば、会社のマネージャーのリストがあり、あるページには役割と連絡先の詳細を含む名前を表示し、別のページには他のデータを含まずに名前だけを表示したいとします。 REST シナリオでは、どこでも 1 つのリクエストを使用して不要なデータで応答し、帯域幅を使い果たすか、ページごとに個別のリクエストを記述する必要があり、コードの重複と複雑さが生じます。通常、同じリクエストが全体で使用されます。
GraphQL は、Facebook によって開発された API 用のクエリ言語です。 REST API よりも柔軟な GraphQL を使用すると、開発者は必要なデータをすべて 1 回のリクエスト (クライアント主導のクエリ) で取得できます。開発者は、API から受け取りたいデータ型を指定することもできます。
GraphQL は、リクエストとレスポンスの相互作用の問題を解決します。当社では、特定のクエリ言語を利用して、クライアントの特定のデータ ニーズを常にサーバーに指示します。マネージャーの例をもう一度見てみると、クライアントは標準化されたデータを受信するようにデフォルト設定されていませんが、必要な情報 (名前や電話番号など) を選択でき、サーバーはこの特定の情報で応答します。
このシステムは、より優れた柔軟性と拡張性、複雑なシステム、マイクロサービスを必要とするアプリに最適です。
GraphQL の利点:このアプローチにより帯域幅が節約され、パフォーマンスが向上し、柔軟性と拡張性が向上します。
欠点:クエリ言語がより複雑で、参入障壁がかなり高いため、専門家がいない場合はサポートが複雑になる可能性があります。コミュニティも小さくなります。
Google によって作成されたオープンソースの RPC フレームワークである gRPC は、高性能の API 開発テクノロジとみなされます。 gRPC は、構造化データをシリアル化するための言語に依存せず、プラットフォームに依存しないメカニズムであるプロトコル バッファーを活用します。
非常に似ている REST や GraphQL とは異なり、gRPC は異なるクライアント/サーバー対話を提供し、HTTP/2.0 プロトコルでのみ使用できます。この高度なプロトコルは、データ圧縮、ユーザー接続などに利点をもたらします。
gRPC は、高パフォーマンスの通信要件があるプロジェクトに最適です。
利点: gRPC はストリームとそのクエリ言語を通じてサーバーと通信するため、フロントエンドかバックエンドかに関係なく、プロセス全体が単一のシステム内で発生しているように見えます。フロントエンドはバックエンドで記述されたメソッドを呼び出すことができます。ただし、実際には、最初にサーバー メソッドを記述して構築する必要があります。そうして初めて、フロントエンドはこれらのメソッドが存在し、使用できることを認識します。これらすべてを設定するには、このタイプの API の経験が必要です。
その他の利点としては、よりコンパクトなデータ、優れたパフォーマンス、迅速な応答などが挙げられます。
欠点としては、コミュニティが小さいこと (プロトコルはまだ進化中)、参入障壁が比較的高いことが挙げられます。データ送信プロトコルを理解することも重要です。新人はこのプロトコルに慣れていない可能性が高いため、トレーニングを受ける必要があります。 API 開発の他のアプローチと比較すると、これは非常に複雑で時間がかかり、プロジェクトにとって必ずしも正当であるとは限りません。
API 開発の開始および進行中に、ソフトウェア エンジニアはいくつかの重要な点を考慮する必要があります。これにより、API のセキュリティと効率が確保されます。
認証は正しい ID を検証し、承認は検証されたユーザーが特定のアクションを実行できるかどうかを決定します。これらのタスクは、JWT、OAuth、OAuth2 などの共通仕様で処理されます。
認証方法の選択は、必要なセキュリティ レベルと実装とメンテナンスの容易さのバランスによって決まります。 OAuth はスケーラビリティと優れたユーザー エクスペリエンスを提供しますが、実装とメンテナンスにはより多くの労力が必要です。 OpenID は、認可サーバーを通じてクライアントの ID とプロファイルを検証することで OAuth を補完できます。
データベースが大きくなるにつれて、データの取得が遅くなる可能性があります。これを軽減するには、キャッシュ、ページネーション、並べ替え、フィルタリングを実装します。
並べ替えは特定の条件に従ってデータを整理し、ページネーションは表示するデータの量とタイミングを決定します。これらの機能により、処理時間、応答時間、セキュリティが向上します。
API でのフィルタリングは、特定の基準に基づいて結果セットを絞り込み、API のパフォーマンスを向上させ、ネットワーク データ送信を削減します。 API タイプに応じて、さまざまな方法で並べ替え、フィルタリング、ページネーションを実装できます (REST API のパス パラメーターを使用するなど)。
キャッシュにより、頻繁に要求されるデータがセカンダリ ストアに保存され、プライマリ データベースへの呼び出しが削減されます。この戦略により、データの取得速度が向上し、リクエストのコストが削減されます。 Memcached や Redis などのツールは、このプロセスを支援します。
キャッシュを保存する場所に応じて、クライアント キャッシュまたはサーバー キャッシュを使用できます。クライアント キャッシュは日常的な要求をローカルに保存することでクライアントとサーバーの効率を向上させますが、サーバー キャッシュは繰り返しの呼び出しをキャッシュに保存することでサーバーの負荷を軽減します。
REST は、より単純なキャッシュ メカニズムを提供します。 GraphQL API と gRPC API を使用すると、開発者はキャッシュにより多くの時間を費やす必要があります。
効果的なエラー処理により、クライアント エラーとサーバー エラーを区別することでデバッグが簡素化されます。明確なエラー コードを提供し、エラーの数を指定し、エラーの原因を説明し、一般エラーとドメイン エラーを区別することは、効果的なエラー処理方法です。
検証によりデータの正確性が確認されます。通常、クライアント側の検証には修正のための迅速なフィードバックが含まれており、これは製品にとってプラスとなりますが、サーバー側の検証はセキュリティ、データの整合性、および脆弱性の保護を確保するために必須です。これには、必要なプロパティの検証やプロパティ タイプの定義などのタスクが含まれます。
API 開発には、よく知られた間違いを回避し、製品のパフォーマンス、セキュリティ、およびスケーラビリティを向上させるのに役立つベスト プラクティスがいくつかあります。ただし、それぞれのケースはユニークであり、カスタマイズされた革新的なソリューションが必要になる可能性があることに注意することが重要です。
API ユーザーの混乱を避けるために、エラーを適切に処理することが重要です。エラーが発生した場合、特定のタイプのエラーを示す適切な HTTP 応答コードを返すと、API メンテナンスに貴重な情報が提供されます。エラーを未処理のままにしておくと、システムに混乱が生じる可能性があるため、遅滞なくエラーを処理することが最善です。
エラー コードには、保守者が問題を効果的にトラブルシューティングできるように、有益なメッセージを添付する必要があります。ただし、これらのエラー メッセージによって、攻撃者がデータの盗難やシステムの中断などの悪意のある活動を実行するために悪用する可能性のある機密情報が漏洩しないようにすることが重要です。
スムーズな移行を確保し、クライアントの中断を回避するには、変更が行われるたびに異なるバージョンの API を使用することが重要です。バージョニングは、2.0.6 (メジャー バージョン 2 と 6 番目のパッチを示す) などのセマンティック バージョニングを使用して実行できます。これは、最新のアプリで一般的に行われています。
このアプローチにより、全員が同時に新しい API に移行する必要がなく、古いエンドポイントを段階的に廃止することができます。たとえば、v1 エンドポイントは変更を望まないユーザーのためにアクティブなままにすることができますが、v2 はエキサイティングな新機能を備えており、アップグレードする準備ができているユーザーに対応します。 API が公開されている場合、バージョン管理によって API に依存するサードパーティ アプリとの互換性が保証されるため、これは特に重要になります。
バージョン管理を実装することにより、Web API は提供する機能とリソースを明確に示すことができ、クライアント アプリケーションはこれらの機能またはリソースの特定のバージョンに向けたリクエストを行うことができます。
API ドキュメントは、API の使用方法とどこから始めればよいかを開発者に説明します。これは、API を統合する開発者と、ソフトウェアの最新化の場合のチームの両方にとって必要です。
API が詳細に文書化されていれば、API の認知度と導入が容易になり、リモート開発者と社内開発者の両方のオンボーディングにかかる時間とコストが削減されます。同時に、社内チームは API ドキュメントを利用して、適用されたメソッド、リソース、リクエスト、レスポンスを理解できるため、メンテナンスと更新が簡素化されます。
開発者がすぐに始められるように簡潔なチュートリアルを提供し、API 用語を定義する包括的な用語集を作成し、リソースとメソッドがユーザーフレンドリーな方法で説明されていることを確認する必要があります。エンド ユーザー (開発者) 間の理解を統一するためにプロジェクト用語をすべてリスト化し、限られた技術知識でも URL や URI などの概念を理解できるようにします。
API を作成するためにどのタイプのプロトコルを選択するかに関係なく、各アプローチには特定の知識とスキルを必要とする特有の特徴があることに注意してください。また、将来的には API サポートも必要になります。これが、REST が不完全さにもかかわらず、依然として最も人気のある API 開発方法である理由です。開発チームの経験が API 中心の製品の成功の鍵となります。
ここでも公開されています。