Yelp API 业务匹配端点
Yelp API Business Matches EndPoint
我正在使用 Yelp API 调用业务匹配端点。不幸的是,我遇到了一个我已经研究了一段时间的错误,但似乎找不到它返回以下响应的原因:
Optional({
error = {
code = "NOT_FOUND";
description = "Resource could not be found.";
};
})
我设置端点的方式如下:
import Foundation
import Moya
private let apiKey = ""
enum YelpService {
enum BusinessMatch: TargetType {
case match(name: String, address1: String, city: String, state: String, country: String)
var baseURL: URL {
return URL(string: "https://api.yelp.com/v3/businesses/matches")!
}
var path: String {
switch self {
case .match:
return "/match"
}
}
var method: Moya.Method {
return.get
}
var sampleData: Data {
return Data()
}
var task: Task {
switch self {
case let .match(name, address1, city, state, country):
return .requestParameters(parameters: ["name": name, "address1": address1, "city": city, "state": state, "country": country, "limit": 1], encoding: URLEncoding.queryString)
}
}
var headers: [String : String]? {
return ["Authorization": "Bearer \(apiKey)"]
}
}
}
然后我用以下内容调用端点:
import UIKit
import CoreData
import Moya
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
let service = MoyaProvider<YelpService.BusinessMatch>()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
service.request(.match(name: "Sushi Damo", address1:
"330 W 58th St", city: "New York", state: "NY", country: "US")) { (result) in
switch result {
case .success(let response):
print(try? JSONSerialization.jsonObject(with: response.data, options: []))
case .failure(let error):
print("Error: \(error)")
}
}
return true
}
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
// MARK: - Core Data stack
lazy var persistentContainer: NSPersistentContainer = {
/*
The persistent container for the application. This implementation
creates and returns a container, having loaded the store for the
application to it. This property is optional since there are legitimate
error conditions that could cause the creation of the store to fail.
*/
let container = NSPersistentContainer(name: "APITest")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
/*
Typical reasons for an error here include:
* The parent directory does not exist, cannot be created, or disallows writing.
* The persistent store is not accessible, due to permissions or data protection when the device is locked.
* The device is out of space.
* The store could not be migrated to the current model version.
Check the error message to determine what the actual problem was.
*/
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
// MARK: - Core Data Saving support
func saveContext () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
}
认为您被收录了 /matches
两次。您的 baseURL
和 var path: String
中都有
curl -X GET "https://api.yelp.com/v3/businesses/matches\
?name=Sushi%20Damo&address1=330%20W%2058th%20St&city=New%20York&state=NY\
&country=US&limit=1" \
-H "Authorization: Bearer API_KEY"
适合我。但是
curl -X GET "https://api.yelp.com/v3/businesses/matches/matches\
?name=Sushi%20Damo&address1=330%20W%2058th%20St&city=New%20York&state=NY\
&country=US&limit=1" \
-H "Authorization: Bearer API_KEY"
告诉我你得到的错误。
建议将 baseURL
和 path
更改为:
public var baseURL: NSURL { return NSURL(string: "https://api.yelp.com")! }
public var path: String {
switch self {
case .match:
return "/v3/businesses/matches"
}
}
我正在使用 Yelp API 调用业务匹配端点。不幸的是,我遇到了一个我已经研究了一段时间的错误,但似乎找不到它返回以下响应的原因:
Optional({
error = {
code = "NOT_FOUND";
description = "Resource could not be found.";
};
})
我设置端点的方式如下:
import Foundation
import Moya
private let apiKey = ""
enum YelpService {
enum BusinessMatch: TargetType {
case match(name: String, address1: String, city: String, state: String, country: String)
var baseURL: URL {
return URL(string: "https://api.yelp.com/v3/businesses/matches")!
}
var path: String {
switch self {
case .match:
return "/match"
}
}
var method: Moya.Method {
return.get
}
var sampleData: Data {
return Data()
}
var task: Task {
switch self {
case let .match(name, address1, city, state, country):
return .requestParameters(parameters: ["name": name, "address1": address1, "city": city, "state": state, "country": country, "limit": 1], encoding: URLEncoding.queryString)
}
}
var headers: [String : String]? {
return ["Authorization": "Bearer \(apiKey)"]
}
}
}
然后我用以下内容调用端点:
import UIKit
import CoreData
import Moya
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
let service = MoyaProvider<YelpService.BusinessMatch>()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
service.request(.match(name: "Sushi Damo", address1:
"330 W 58th St", city: "New York", state: "NY", country: "US")) { (result) in
switch result {
case .success(let response):
print(try? JSONSerialization.jsonObject(with: response.data, options: []))
case .failure(let error):
print("Error: \(error)")
}
}
return true
}
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
// MARK: - Core Data stack
lazy var persistentContainer: NSPersistentContainer = {
/*
The persistent container for the application. This implementation
creates and returns a container, having loaded the store for the
application to it. This property is optional since there are legitimate
error conditions that could cause the creation of the store to fail.
*/
let container = NSPersistentContainer(name: "APITest")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
/*
Typical reasons for an error here include:
* The parent directory does not exist, cannot be created, or disallows writing.
* The persistent store is not accessible, due to permissions or data protection when the device is locked.
* The device is out of space.
* The store could not be migrated to the current model version.
Check the error message to determine what the actual problem was.
*/
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
// MARK: - Core Data Saving support
func saveContext () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
}
认为您被收录了 /matches
两次。您的 baseURL
和 var path: String
curl -X GET "https://api.yelp.com/v3/businesses/matches\
?name=Sushi%20Damo&address1=330%20W%2058th%20St&city=New%20York&state=NY\
&country=US&limit=1" \
-H "Authorization: Bearer API_KEY"
适合我。但是
curl -X GET "https://api.yelp.com/v3/businesses/matches/matches\
?name=Sushi%20Damo&address1=330%20W%2058th%20St&city=New%20York&state=NY\
&country=US&limit=1" \
-H "Authorization: Bearer API_KEY"
告诉我你得到的错误。
建议将 baseURL
和 path
更改为:
public var baseURL: NSURL { return NSURL(string: "https://api.yelp.com")! }
public var path: String {
switch self {
case .match:
return "/v3/businesses/matches"
}
}