2017-02-06 5 views
2

Я теперь имею дело с пагинацией результатов поиска в моей API, сделанные в Laravel, и я наткнулся на это в документации:Laravel 5 - разбиение на страницы результатов в заголовке вместо JSON

https://laravel.com/docs/5.3/pagination#converting-results-to-json

It кажется приятным, но в то же время меня очень беспокоит тот факт, что он изменяет структуру результата, поскольку он скрывает возвращаемые данные внутри ключа «данных».

Проблема в том, что до сих пор я возвращал не разбитый на страницы JSON-массив объектов и включающий разбиение на страницы таким образом, либо потребовал бы внесения замечательных изменений в интерфейсный модуль, либо привел бы к несовместимости по API (там было бы это API-вызовы, которые возвращают вложенные данные и другие, которые возвращают их напрямую - мне это не нравится).

Мне бы хотелось больше включить метаданные разбиения на страницы в заголовке ответа, которые не испортят мою текущую структуру ответов. Знаете ли вы о любом готовом решении (например, Laravel package)? Или какой другой подход вы бы рекомендовали мне решить мою дилемму?

ответ

1

Совет: Никогда не прибегайте к ошибке, иначе вы обречены на ад, поверьте мне.

В приведенном выше предложении означает, что ваш интерфейс - это проблема, а не ответ laravel, я использовал эту разбивку на страницы во многих приложениях, и они всегда работали на меня, означают, что это page_data и page_meta_data подаются в одном объекте, они принадлежат togather.

Я хочу показать вам два примера

Instagram Instagram Post Pagination

Airbnb enter image description here

Я не хочу сказать, что эти стандарты, но вы можете думать что это лучший подход.

Laravel Пакет

Я почти на 100% уверен, что нет Laravel пакет для вас, чтобы помочь.

Hack/Фикс для выпуска

Laravel дает вам свободу добавления заголовков в ответ все вместе.

return response()->headers($key, $value)->headers($key, $value); 

Отказ от ответственности: Это не правильный способ сделать это, а это даже не близко к правильному пути.

+0

Это не дает ответа на вопрос о том, как поместить данные в нумерации страниц заголовков. Кроме того, существуют многочисленные (встречные) примеры API, которые возвращают данные разбиения на страницы в заголовках. – bzeaman

+0

Привет @bzeaman, я обновлю ответ для этого – rummykhan

+0

Привет @bzeaman Я думаю, что я уже добавил эти заголовки pagination thingy 'return response() -> headers ($ key, $ value) -> headers ($ key, $ value); ' – rummykhan

3

Существует, по-видимому, два варианта информации разбиения на страницы в API - в корпусе ответа, как это делает Laravel, и в информации заголовка (например, github does).

У меня возникла проблема с Laravel с новым проектом, и я довольно много решил, что хочу разбивать страницы на заголовки - это просто немного лучше (по общему признанию, это горячо обсуждаемая тема).

Я еще не построил это, поэтому со временем я могу изменить свое мнение, но создание части промежуточного программного обеспечения и присоединение его к группе API, похоже, является способом выхода.

В этом промежуточном слое, мы должны получить полный ответ, прежде чем добавлять заголовки, что-то вроде:

public function handle($request, Closure $next, $guard = null) 
{ 
    // let other middleware handle the request first 
    $response = $next($request); 

    // get paging links here 
    // <url>; rel="next", <url>; rel="prev", <url>; rel="first", <url>; rel="last" 
    $response->header("Link: " . $links); 

    return $response; 
} 

Laravel документов on middleware рекомендуется чтение тоже.

0

У меня такая же проблема. Мне нравится разбиение заголовка ссылки, github использует его, поскольку тело ответа содержит только «сырые» данные, а не метаданные.

Я думаю, что этот пример промежуточного программного обеспечения Laravel может вам помочь.

Route::get('items', '[email protected]')->middleware('link-header-pagination'); 

https://github.com/y-zono/laravel-link-header-pagination

Смежные вопросы