За последние 24 часа нас посетили 17802 программиста и 1652 робота. Сейчас ищет 1681 программист ...

Архитектура API

Тема в разделе "Решения, алгоритмы", создана пользователем vlastv, 21 ноя 2013.

  1. vlastv

    vlastv Новичок

    С нами с:
    21 ноя 2013
    Сообщения:
    1
    Симпатии:
    0
    Вот и настала моя учесть реализовывать большое сложное API.

    Потратил 2 недели на поиски вменяемой информации по архитектуре, но ничего внятного не нашел.

    Допустим необходимо реализовать несколько REST методов:
    Код (Text):
    1. /files/
    2. /files/1
    3. /files/1/comments
    4. /user/2
    При этом, должна быть возможность получения в одном запросе нескольких коннекторов одновременно, как у Facebook API, Google API и т.д.

    Например,
    Код (Text):
    1.  
    2. //Request
    3. http://api/files?fields=id,name,comments.fields(text,user.fields(name))
    4.  
    5. // Response
    6. {
    7.     "items":[
    8.         {
    9.             "id":1,
    10.             "name":"test.txt",
    11.             "comments":[
    12.                 {
    13.                     "text":"lalala 1",
    14.                     "user":{
    15.                         "name":"Vasya"
    16.                     }
    17.                 },
    18.                 {
    19.                     "text":"lalala 2",
    20.                     "user":{
    21.                         "name":"Petya"
    22.                     }
    23.                 }
    24.             ]
    25.         }
    26.     ]
    27. }
    Так вот в чем вопрос, во первых не известно какие поля запросит клиент API.

    Я думал в сторону Varnish ESI JSON, т.е. я отдаю ESI допустим на информацию о пользователе, оно интегрируется в JSON, отдельно информацию на список комментариев, аналогичная ситуация. Тогда мне необходимо реализовать простые методы контроллера.

    Но правильно ли это, или я в рамках одно контроллера, практически в рекурсии должен сформировать единый JSON, но тут может появиться очень большое количество SQL запросов.