web-dev-qa-db-ja.com

「パブリックAPIは永遠です:正しく機能するためのたった1つのチャンス」?

OSの本を読んだところ、「パブリックAPIは永久に存在します。正しく理解するためのたった1つのチャンス」です。本当ですか?オペレーティングシステムのAPIまたは他のAPIにのみ適用できますか?たとえば、これはAndroid Tasker、Locale、Pushoverなどのアプリケーション)のAPIに当てはまりますか?

20
user52009

はい、それは一般的にどのパブリックAPIにも当てはまります。 APIを一般に公開し、人々がそのAPIに依存するアプリケーションの構築を開始すると、APIを変更すると、すべてのアプリケーションが壊れるため、非常に困難になります。それは難しい技術的問題と政治的問題の両方になる傾向があります。

もちろん、パブリックAPIを変更することは可能です。たとえば、あるリリースでプロジェクトがAPIを廃止し、新しいAPIを導入し、将来のリリースで古いAPIを削除する場合があります。ただし、これは、古いAPIを削除する前に、古いAPIを使用するすべての(重要な)アプリケーションが新しいAPIを使用するように書き換えられることを前提としています。それには多くの場合数年かかります。つまり、パブリックAPIの所有者は、APIを使用する他のすべてのプロジェクトにコストを課しています。一般にAPIの消費者ははるかに多いため、それらの消費者は比較的強力な政治的ロビーになる傾向があります。

32
Justin Cave

引用著者はジョシュア・ブロッホであり、ステートメントは彼の バンパーステッカーAPIデザイン 記事からです:

ひし形などの公開APIは永遠です。正しく機能するチャンスが1回あるため、最善を尽くしてください。

その詳細については、著者が読者に会議セッションのプレゼンテーション "How to Design a Good API and Why it Matters" を紹介しています。スライドあなたにとってAPI設計が重要である理由は、これがプログラミングアクティビティ(オペレーティングシステムかどうか)に関連していることをかなり明確に述べています、作成者には関係ありません):

  • あなたがプログラムするなら、あなたはAPIデザイナーです

    • 優れたコードはモジュール式です-各モジュールにはAPIがあります
  • 有用なモジュールは再利用される傾向がある

    • モジュールにユーザーが追加されると、APIを自由に変更できなくなります
    • 優れた再利用可能なモジュールは企業の資産です
  • APIの観点から考えると、コードの品質が向上します

スライド結論も一般的なアプローチとしてこれを強調しています:

  • APIデザインは高貴でやりがいのある技術です

    • 多くのプログラマー、エンドユーザー、企業を改善します...
12
gnat

APIは常に変更されます。それ以外の場合、システムアップグレードのポイントは何でしょうか。内部のみを変更しますか?

システムの各バージョンは新しいAPIをもたらし、古いAPIは廃止され、廃止されたAPIは消えます。

APIの変更は、技術的にもコミュニケーションの面でも非常に注意が必要です。

3
mouviciel

私の意見では、リリースされたAPIの「バージョン」は永遠ですが、「2.0」APIをリリースすることで非推奨にできます(これが発生している例がいくつかあります-現在、リリースしたStravaのことを考えることができます)サービスを利用するための開発用API 2.0バージョン)。

問題はその元のAPI広告を無限にサポートしていることです...それは古いAPIの使用法と、それらのAPIコンシューマーの価値があなたに何を保持しているかに依存すると思います。

Windows 3.xや9xなどの「昔」に戻って、リリースされたら、それらのOS APIが完成し、設定されました。現在、OSの更新は常にプッシュされているため、新しいAPIをリリースできますが、特定のOSフレーバー(メジャーリリース)を実行している限り、これらのAPIは追加されるだけで、削除されることはない...とは限りませんただし、「次の」メジャーリリースの場合も同様です。

うーん、多分私は元の質問の意図から逸脱しました。

2
Maich

それは、それがどのようなAPIであるかによって異なります(そして私は重大な変更を想定しています。それ以外の場合、ステートメントは明らかに真実ではありません)。

呼び出し元が使用しているバージョンを選択できる場合(たとえば、呼び出し元のアプリケーションにバンドルされているライブラリ/フレームワークを使用)、APIを変更することは大きな問題ではありませんが、ソフトウェアの評判に悪影響を及ぼします。人々はシームレスにアップグレードしたい。

一方、人々が古いバージョンのAPIを使い続けることができない場合(オンラインサービス、または古いバージョンの実行が非常に望ましくないブラウザーやOSなど)、互換性のない方法でAPIを変更することは非常に悪いことです実際、それを使用するすべてのソフトウェアが壊れてしまい、更新もされないためです。これは開発者に維持費を課し、開発者はあなたを嫌うでしょう。そして、メンテナンスされていないソフトウェアや壊れているソフトウェアは、あなたにも悪影響を及ぼします。

握手する人には、少なくとも1つのAPIプロバイダーがあり常にAPIに重大な変更を導入し、とにかく途方もなく成功しています:Facebook。ただし、変更は非常に慎重に管理されます。 公開されたポリシー があり、重大な変更が発表され、少なくとも90日前に説明され、開発者はその期間内に早期にアクティブ化することを選択できます。

1

API自体にバージョン番号を含めることができる場合。接続/初期化呼び出し、または各呼び出しのパラメーターリストの先頭近くのいずれかで、APIは、既存のクライアントを中断することなく、時間の経過とともに進化および変化できます。

1
James Anderson

私たちがすることはすべて、一度にベストを尽くすことですが、時の変化と改善がもたらされて以来、巨大なプロバイダーの多くが行っているように、情報を更新する必要がある場合があります(facebookのいくつかの更新、Twitterの1つのメジャーなど) oAuthといくつかの主要なものに変わりますが、多くの場合すべてに改善が加えられるため、頻繁な変更はありません。そして、古いもののサポートを停止しないでください、痛いです!! :)

0
rptwsthi