Борьба с клиентом Vapor

Я пытаюсь сделать простой запрос на получение API Google Places из моего веб-сервиса пара.

Вот так выглядит мой контроллер:

import Vapor
import HTTP
import VaporPostgreSQL

final class MainController {

var currentDroplet: Droplet!

func addRoutes(drop: Droplet) {

    currentDroplet = drop
    drop.get("places",String.self, String.self, handler: getNearbyPlaces)

}

func getNearbyPlaces(request: Request, lat: String, long: String) throws -> ResponseRepresentable {

    let googleAPIKey = "MY_KEY"
    let googlePlacesBaseURL = "https://maps.googleapis.com/maps/api/place/nearbysearch"

    let url = googlePlacesBaseURL + "/json?location=\(lat),\(long)&radius=500&types=food&key=" + googleAPIKey

    print(url)

    let apiResponse = try drop.client.get(url)

    print(apiResponse)

    return apiResponse.json != nil ? apiResponse.json! : "Something went bad"


   }
}

Это должно быть так просто, однако, когда я вызываю его, запрос зависает в течение длительного времени, а затем возвращает 500. Обратите внимание, что напечатанный url в консоли отлично работает непосредственно в браузере. . Я также не мог найти полезный способ отлавливать и отлаживать любые ошибки.


person Lucas Pereira    schedule 02.02.2017    source источник
comment
правильно ли закодирован URL?   -  person muescha    schedule 02.02.2017
comment
Ага. URL-адрес, зарегистрированный в консоли, отлично работает в браузере.   -  person Lucas Pereira    schedule 02.02.2017
comment
браузер сам преобразует URL-адрес в правильный формат - если вы звоните через программу, вам, возможно, потребуется его закодировать   -  person muescha    schedule 02.02.2017
comment
вызовите его с помощью curl в командной строке, тогда он также должен работать   -  person muescha    schedule 02.02.2017
comment
Это также работает. Кажется, это точно так, как описано в документации клиента Vapor: https://vapor.github.io/documentation/http/client.html   -  person Lucas Pereira    schedule 02.02.2017


Ответы (1)


Мне нужно было добавить import Foundation и drop.client = FoundationClient.self к main.swift, чтобы аналогичный вызов работал.

person MartinW    schedule 02.02.2017
comment
Это сделало это. Как по волшебству. Большое спасибо! Не могу поверить, что они не указывают это в документах... - person Lucas Pereira; 02.02.2017
comment
drop.client это let. Его нельзя назначить. Любое другое решение? - person Rishabh Tayal; 28.09.2017