/ / Де розмістити поточні дані контексту користувача у відповідь JSON? - json, api, відпочинок, соціальні мережі

Де поставити поточні дані контексту користувача у відповідь JSON? - json, api, відпочинок, соціальна мережа

Розглянемо соціальну мережу. У ньому є пости. На канал ви запитуєте /feed і отримати список публікацій.

У користувальницькому інтерфейсі є речі, які можна показати для публікації, наприклад, сподобався користувачеві публікація чи ні, якщо користувач зізнався це чи ні, тощо. Ці речі не виглядають так, як вони належать усередині об'єкта публікації.

Інший випадок, коли ви отримуєте лайки. Фронтенд повинен знати, користувач у кожному об'єкті «подобається» дотримується чи ні.

Куди подіти цю інформацію у відповідь JSON?

Відповіді:

2 для відповіді № 1

Це залежить від вашої програми та даних, які ви хочете показати користувачеві. Наприклад, врахуйте, що ви перераховуєте канали користувача. У цьому каналі ви хочете показати

  1. повідомлення
  2. Подобається поточному користувачеві чи ні (я не знаю різниці між сподобавсями та поглядаючими)
  3. Кількість лайків
  4. Список сподобалися користувачів.
  5. поділяється користувачем чи ні
  6. Спільна кількість
  7. Список спільних користувачів.

тощо.

У наведеному вище списку

Для отримання повної інформації для деяких даних потрібно отримати два apiа деякі ні. Наприклад, "Список сподобалися користувачів", "Список спільних користувачів". Це, як правило, динамічний модуль даних. Ви повинні отримати ці деталі в окремому api для кращої роботи сервера, а також цілісності даних.

У деяких випадках для деяких додатків потрібно заглядати вподобану інформацію про спільних користувачів на сторінці списку. У цьому випадку ви можете включити деяку фіксовану невелику кількість користувачів у той самий список /feeds сама відповідь і включіть в інтерфейс опцію "Побачити більше (як Facebook)".

Деякі статичні сингулярні дані (дані одного стовпця) можуть бути перелічені в початковому отриманні /feeds сама по собі

Мені цікаво, чому ти не переслідуєш твіт твіттерського списку того ж твіттера,

https://dev.twitter.com/rest/reference/get/search/tweets

{
"coordinates": null,
"favorited": false,
"truncated": false,
"created_at": "Fri Sep 21 23:40:54 +0000 2012",
"id_str": "249292149810667520",
"entities": {
"urls": [

],
"hashtags": [
{
"text": "FreeBandNames",
"indices": [
20,
34
]
}
],
"user_mentions": [

]
},
"in_reply_to_user_id_str": null,
"contributors": null,
"text": "Thee Namaste Nerdz. #FreeBandNames",
"metadata": {
"iso_language_code": "pl",
"result_type": "recent"
},
"retweet_count": 0,
"in_reply_to_status_id_str": null,
"id": 249292149810667520,
"geo": null,
"retweeted": false,
"in_reply_to_user_id": null,
"place": null,

"user":
{
"profile_sidebar_fill_color": "DDFFCC",
"profile_sidebar_border_color": "BDDCAD",
"profile_background_tile": true,
"name": "Chaz Martenstein",
"profile_image_url": "http://a0.twimg.com/profile_images/447958234/Lichtenstein_normal.jpg",
"created_at": "Tue Apr 07 19:05:07 +0000 2009",
"location": "Durham, NC",
"follow_request_sent": null,
"profile_link_color": "0084B4",
"is_translator": false,
"id_str": "29516238",
"entities": {
"url": {
"urls": [
{
"expanded_url": null,
"url": "http://bullcityrecords.com/wnng/",
"indices": [
0,
32
]
}
]
},
"description": {
"urls": [

]
}
},
"default_profile": false,
"contributors_enabled": false,
"favourites_count": 8,
"url": "http://bullcityrecords.com/wnng/",
"profile_image_url_https": "https://si0.twimg.com/profile_images/447958234/Lichtenstein_normal.jpg",
"utc_offset": -18000,
"id": 29516238,
"profile_use_background_image": true,
"listed_count": 118,
"profile_text_color": "333333",
"lang": "en",
"followers_count": 2052,
"protected": false,
"notifications": null,
"profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/9423277/background_tile.bmp",
"profile_background_color": "9AE4E8",
"verified": false,
"geo_enabled": false,
"time_zone": "Eastern Time (US & Canada)",
"description": "You will come to Durham, North Carolina. I will sell you some records then, here in Durham, North Carolina. Fun will happen.",
"default_profile_image": false,
"profile_background_image_url": "http://a0.twimg.com/profile_background_images/9423277/background_tile.bmp",
"statuses_count": 7579,
"friends_count": 348,
"following": null,
"show_all_inline_media": true,
"screen_name": "bullcityrecords"
},
"in_reply_to_screen_name": null,
"source": "web",
"in_reply_to_status_id": null
}

1 для відповіді № 2

Для всіх користувачів поштовий ресурс повинен бути однаковим. Додавання конкретної інформації про контекст користувача всередині здається, що це забруднює її

Я бачу, звідки ти родом, і я цілком згоден.

Перший розчин Івана не слід використовувати як вінвже згадувалося, його другий кращий, але тоді, якщо ви отримаєте повідомлення JSON, які повинні містити лише об'єкти публікації, є також цей currentUser, який насправді там не належить.

Моя пропозиція полягає в тому, щоб ви зберігали кожен дописвідстежуйте, яким користувачам сподобалося та / або позначили це зірочкою і т.д.

Приклад

GET /feed HTTP/1.1

[
{
"text": "hello world, im a post!",
"author": "Jack",
"likes": 3,
"likedBy": [
"John",
"James",
"Jessica"
],
"stars": 2,
"starredBy": [
"John",
"Mary"
]
},
{
"text": "hello world, im also a post! :D",
"author": "Mary",
"likes": 1,
"likedBy": [
"James"
],
"stars": 0,
"starredBy": [
]
},
]

Де кожен {} Об'єкт представляє поштовий об'єкт.

На стороні клієнта ви можете перевірити, чи є likedBy список містить поточно зареєстрованого користувача та продовжуйте результат, як вважаєте за потрібне. Те саме для зірок та будь-яких інших цих властивостей, можливо, публікація.


1 для відповіді № 3

У вас є два варіанти:

  • Створіть окремий метод API для отримання інформації про дані контексту користувача - /api/users/1/feeds/1 . Зверніть увагу, що ця опція змусить вас надсилати запит на канал. Отже, якщо у вас буде 1000 каналів - у вас буде запит 1000 + 1 (так звана проблема N + 1).
    Щодо мене - це не дуже гарна ідея.

  • Ви можете зберігати дані користувачів у json, наприклад таким чином:

    {
    "feedName": "feed1",
    ...
    "currentUser": {
    "liked": true,
    "starred": true
    }
    }
    

    Використовуючи цю опцію, ви уникнете проблеми N + 1 запитів у вашій службі RESTful