3

最近、私たちのチームは、既存のウェブサイト用のモバイル (iPhone、Android プラットフォーム) アプリケーションを開発する予定です。これにより、ユーザーはアプリケーションを使用して、アプリケーションを介してコンテンツをより簡単に読むことができます。

しかし、私たちのチームは、API リターンの JSON スキーマで異なるビューを持っています。以下はサンプル レスポンスです。

スキーマ タイプ 1:

{
"success": 1,
"response": {
    "threads": [
        {
            "thread_id": 9999,
            "title": "Topic haha",
            "content": "blah blah blah",
            "category": {
                "category_id": 100,
                "category_name": "Chat Room",
                "category_permalink": "http://sample.com/category/100"
            },
            "user": {
                "user_id": 1,
                "name": "Hello World",
                "email": "helloworld@hello.com",
                "user_permalink": "http://sample.com/user/Hello_World"
            },
            "post_ts": "2012-12-01 18:16:00T0800"
        },
        {
            "thread_id": 9998,
            "title": "asdasdsad ",
            "content": "dsfdsfdsfds dsfdsf ds",
            "category": {
                "category_id": 101,
                "category_name": "Chat Room 2",
                "category_permalink": "http://sample.com/category/101"
            },
            "user": {
                "user_id": 2,
                "name": "Hello baby",
                "email": "hellobaby@hello.com",
                "user_permalink": "http://sample.com/user/2"
            },
            "post_ts": "2012-12-01 18:15:00T0800"
        }
    ]
}
}

スキーマ タイプ 2:

{
"success": 1,
"response": {
    "threads": [
        {
            "thread_id": 9999,
            "title": "Topic haha",
            "content": "blah blah blah",
            "category": 100,
            "user": 1,
            "post_ts": "2012-12-01 18:16:00T0800"
        },
        {
            "thread_id": 9998,
            "title": "asdasdsad ",
            "content": "dsfdsfdsfds dsfdsf ds",
            "category": 101,
            "user": 2,
            "post_ts": "2012-12-01 18:15:00T0800"
        }
    ],
    "category": [
        {
            "category_id": 100,
            "category_name": "Chat Room",
            "category_permalink": "http://sample.com/category/100"
        },
        {
            "category_id": 101,
            "category_name": "Chat Room 2",
            "category_permalink": "http://sample.com/category/101"
        }
    ],
    "user": [
        {
            "user_id": 1,
            "name": "Hello World",
            "email": "helloworld@hello.com",
            "user_permalink": "http://sample.com/user/Hello_World"
        },
        {
            "user_id": 2,
            "name": "Hello baby",
            "email": "hellobaby@hello.com",
            "user_permalink": "http://sample.com/user/Hello_baby"
        }
    ]
}
}

一部の開発者は、スキーマ タイプ 2 を使用すると、

  • カテゴリとユーザー エンティティが重複しすぎると、データ サイズを減らすことができます。応答プレーンテキストのサイズを少なくとも 20 ~ 40% 削減します。
  • 一度データサイズが小さくなると、JSONオブジェクトに解析する際にメモリが少なくなります
  • categoey と user はハッシュマップに保存でき、再利用が容易
  • データ取得時のオーバーヘッドを削減

スキーマ タイプ 2 が本当に強化されているかどうかはわかりません。私は非常に多くの API ドキュメントを読んでいるので、このタイプのスキーマ設計は見たことがありません。私にとっては、リレーショナル データベースのように見えます。Web サービス API の設計経験がないので、いくつか質問があります。

  • API の設計原則 (読みやすく、使いやすい) に反していませんか?
  • IOS / Android プラットフォームで解析すると、本当に高速になり、メモリ リソースが少なくなりますか?
  • クライアントとサーバー間のオーバーヘッドを削減できますか?

ありがとうございます。

4

1 に答える 1

0

このようなアプリケーションを Android 向けに作成する場合、JSON を 1 つだけ解析してデータベースに入れます。後で ContentProvider を使用してアクセスしています。あなたの場合、2番目のスキーマを使用できますが、ユーザー、カテゴリ部分はありません。代わりに遅延読み込みを使用しますが、カテゴリとユーザーが頻繁に繰り返す場合に備えて、適切なソリューションになります。

于 2012-12-02T11:59:02.420 に答える