18

そのため、現在、Djangoを使用して作成されたWebサイトがあります。ここで、同じバックエンドを使用するネイティブiOSアプリを作成したいので、すべてを再コーディングする必要はありません。私の理解では、2つの代替ルートがあります。

1)Django URLを直接呼び出し、次に関数を呼び出します。その関数内で、エンコードされたJSONデータを使用してHTTPResponseを作成し、それを送り返します。

2)Tastypieのようなものを使用してDjangoサーバーからRESTサービスを作成します。ただし、オブジェクトに対して直接GET呼び出しを行う以外に、TastyPieからDjangoモデルでカスタム関数を呼び出す方法がわかりません。それもできますか?

DjangoやRoRなどの既存のバックエンドでiOSからWebサービスを利用することについての情報があまりないのは驚くべきことです。たとえば、InstagramがDjangoを使用していることは知っていますが、iOSからサーバーにどのように通信するのでしょうか。

どうもありがとう!

4

3 に答える 3

9

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

于 2012-10-19T19:37:43.553 に答える
6

可能であれば、車輪の再発明を行うのではなく、一般的な方法で何かを行うようにしてください。そのため、RESTは分散システムのソフトウェアアーキテクチャの標準スタイルであり、エンティティ/オブジェクトを操作するときに非常にうまく機能します。

エンティティと対話するAPIがある場合は、RESTインターフェースを使用することをお勧めします。Pythonには、ほとんどすべての作業を行うTastypieまたは新しいDjangoRestFrameworkがあります。あなたが2)で提案するように

ログインなどのサービスとやり取りするAPIがある場合は、RPCサービスを構築する必要があります。これは、基本的に1)で説明したリモートアクセスを備えた関数です。

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

この場合のパフォーマンスは依然として良好ですが、ほとんどの場合、サービス内で呼び出すメソッド(DBクエリなど)に依存します。速度を向上させる方法はたくさんあります。たとえば、Celeryを使用して重いジョブをキューに入れます。

それが役に立てば幸い。

于 2012-10-20T19:00:32.953 に答える
0

REST APIは非常に便利ですが、リソースに対して実行されるGET、POST、PUT、DELETEアクションに制限されます。これにより、電子メールの送信など、他のアクションタイプを表現することが困難になる可能性があります。django /tastypie内でこれを処理するために私が見つけたいくつかの方法があります:

  1. 既存のリソースに対してPUT/PATCHリクエストを発行し、バックエンドにアクションをトリガーすることを通知するフラグを設定します。フラグが設定されたかどうかの検出は、post_saveシグナルハンドラー内で実行できます(フィールドがFalseからTrueに変更されたかどうかを確認するには、django-model-utils FieldTrackerを使用します)。これは、アプリケーションロジックがRE​​ST APIの外部でも同じように機能することを確認するのにも役立ちます(管理サイト、セロリタスク、HTMLベースのビュー、Pythonシェルを介した変更など)。

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

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

于 2016-01-15T22:58:26.720 に答える