REST API で動作するライブラリのペアの開発に取り組んでいます。非常に異なる設定で API を使用できるようにする必要があるため、現在、PHP のバージョン (Web アプリケーション用) と Python の 2 番目のバージョン (デスクトップ アプリケーションおよび長時間実行プロセス用) を計画しています。自分の正気を維持するために、ライブラリの開発で従うべきベスト プラクティスはありますか?
6 に答える
したがって、異なる言語で並列ライブラリを開発する際の問題は、多くの場合、異なる言語では同じタスクに対して異なるイディオムがあることです。これは、Python から PHP にライブラリを移植した個人的な経験から知っています。イディオムは単に名前を付けるだけではありません。たとえば、Python には、getter と setter を使用してオブジェクト プロパティを魔法のように機能させる魔法がたくさんあります。Python にはモンキーパッチがあります。Python には名前付きパラメーターがあります。
ポートを使用すると、「ベース」言語を選択してから、他の言語のすべてのイディオムを模倣しようとします (これは簡単ではありません)。並列開発の場合は、複雑すぎることはせず、最小公分母に対応することが望ましいです。次に、シンタックス シュガーをボルトで固定します。
「自分のクライアントになりましょう」: 最初にテストを作成する手法は、API を使いやすくするための優れた方法であることがわかりました。最初にテストを書くということは、単なる実装者ではなく、API の「消費者」のように考えるようになることを意味します。
両方に共通の単体テスト スイートを作成してみてください。おそらく、ある言語でクラスをラップして、別の言語から呼び出すことができます。それができない場合は、少なくとも 2 つのバージョンのテストが同等であることを確認してください。
当然のことですが、ネーミングの一貫性を保つことです。関数とクラスは、両方の実装で (同一でなくても) 同様に名前を付ける必要があります。これは通常、API を 2 つの異なる言語で別々に実装するときに自然に発生します。ただし、(少なくとも私の本では)重要な項目は、言語固有のイディオムに従うことです。たとえば、REST API を私がよく知っている 2 つの言語、Ruby と Scala で実装しているとします。Ruby バージョンには、MyCompany::Foo
メソッドを含むクラスがある場合がありますbar_baz()
。逆に、同じ API の Scala バージョンにはcom.mycompany.rest.Foo
、メソッドを持つクラスがありbarBaz()
ます。これは命名規則にすぎませんが、設計が別の場所で作成された場合でも、API が特定の言語に「慣れている」と感じるのに大いに役立つことがわかりました。
それを超えて、私からのアドバイスは 1 つだけです。文書、文書、文書です。これは、複数実装の API 仕様を扱うときに正気を保つための最良の方法です。
知る限り、スクリプト言語への架け橋はたくさんあります。たとえば、Jruby を取り上げてみましょう。これは Ruby + Java であり、Ruby を Python に埋め込むものがあります (またはその逆)。次に、ベースが Objective-C であるが、Python と Smalltalk にもブリッジする Etoile のような例があります。これは、広く使用されている別のアプローチです: C ライブラリのラッピング、例は libxml2、libcurl などです。おそらくこれがベースになる可能性があります。Python 用にすべて書いて、PHP へのブリッジを実装するとしましょう。したがって、並行開発はそれほど多くありません。
あるいは、たとえば .NET をベースにするのは最悪の考えではないかもしれません。その場合、突然、.NET プラットフォーム上の他のすべての言語から原則として使用できるはずの大量の言語を自由に使用できるようになります。