2012-10-19 4 views
16

現在、Djangoを使用して作成されたウェブサイトがあります。今、同じバックエンドを使用するネイティブiOSアプリケーションを作成したいので、すべてを再コーディングする必要はありません。iOSアプリ(Django)

1)は、関数を呼び出して直接DjangoのURLを、呼び出し:私の理解からは、二つの代替ルートがあります。その関数内で、エンコードされたJSONデータを含むHTTPResponseを作成し、それを送り返します。

2)TastypieのようなものでDjangoサーバーからRESTサービスを作成します。しかし、オブジェクトへの直接GET呼び出しを行う以外に、私はTastyPieのDjangoモデルでカスタム関数をどのように呼び出すことができないのか分かりません。私たちもそれをすることができますか?

は、私はそれは驚くべきジャンゴやRoRのような既存のバックエンドでのiOSからWebサービスを消費に関する多くの情報がないことがわかります。たとえば、私はinstagramがDjangoを使用していることを知っていますが、iOSからサーバーにどのように通信しますか?

ありがとうございます!

答えて

8

私は現在、バックエンドでのジャンゴ/ Tastypieで、iPhone用iOSアプリに取り組んでいます。リソースはTastypieを介してRESTスタイル(auth)で提供され、JSONを返すさまざまなRESTエンドポイントでviews.pyによってカスタム関数呼び出し(たとえば、新しいユーザーの作成)が処理されます。

+1

どのようなパフォーマンスですか?そして、あなたがまだそれを使用しているなら、あなたはオプション1で一生懸命行きませんでしたか?再度、感謝します! – abisson

+1

私は@ sampson-chenに同意します、私たちは同じことをやっています。我々はtastypieを持つRESTインターフェイスを持っており、他のメソッドはカスタムRPCサービスで行われます。 – clopez

+1

カスタムRPCサービスの仕組みを説明できますか?私は似たようなことに取り組んでおり、認証と再利用の面でいくつかの基準を確実に守っていきたいと考えています。 – Mutant

4

いつホイールを改造するのではなく、何かをする一般的な方法を使用するようにしてください。そのため、RESTは分散システムの標準的なソフトウェア・アーキテクチャー・スタイルであり、エンティティー/オブジェクトを扱うときに非常にうまく機能します。

エンティティとやり取りするAPIがある場合は、RESTインターフェイスを使用することをお勧めします。 Python上では、Tastypieまたはそれ以上の新しい作業を行うDjango Rest Frameworkがあります。あなたは、ログインのように、あなたがサービスと対話するAPIを持っている場合は、1に説明して、その後、あなたはRPCサービス、リモートアクセスでの基本的機能を構築する必要があります2)

で提案したよう)。

通常、堅牢なアプリケーションでは両方の方法が必要です。そして、はい、それは可能です。私は@ sampson-chenに同意します、私たちは同じことをやっています。我々はtastypieを持つRESTインターフェイスを持っており、他のメソッドはカスタムRPCサービスで行われます。

我々の場合での性能はまだ良いですが、大部分は、たとえば、あなたは、サービス内の呼び出し方法にDBクエリを依存しています。 Celeryを使用して大量のジョブをキューに入れるなど、速度を向上させる方法はたくさんあります。

希望します。

0

REST APIは、非常に有用であるが、あなたはPOSTは、リソースに実行されるアクションを、PUT、DELETE、GETに制限します。これにより、電子メールの送信など、他のアクションタイプを表現することが難しくなる可能性があります。あなたのバックエンドがアクションをトリガするために知ることができますフラグを設定

  1. 問題既存のリソースのPUT/PATCH要求、:私はジャンゴ/ tastypie以内にこれを処理することが分かってきたいくつかの方法があります。フラグが設定されているかどうかを検出するには、post_saveシグナルハンドラ内で行うことができます(django-model-utils FieldTrackerを使用して、フィールドがFalseからTrueに変更されたかどうかを確認します)。これはまた、アプリケーション・ロジックがRE​​ST APIの外部で同じように動作することを確認するのに役立ちます(管理サイト、セロリ・タスク、HTMLベースのビュー、またはPythonシェルによる変更など)。

  2. 非ORMリソースを作成します(例:/ api/v1/email /)、post_list()メソッドをオーバーライドして関数を呼び出します。

  3. 他で説明したように、従属リソース(/ api/v1/myresource/send /)を作成します。