swift - 在 Swift 中使用 Neo4j Rest API

标签 swift rest neo4j httprequest httpresponse

我对 iOS 和 Swift 还很陌生,现在我想使用 Neo4j,一个图形数据库来持久保存我的数据。 我知道有一个名为 Theo 的 Lib 用于连接到图形数据库,但我想使用 REST API。现在我不知道如何处理 HTTP 请求,以便将数据从数据库获取到用 Swift 编写的 iOS 应用程序? 有人对我有一些有用的线索吗?

谢谢汉内斯

最佳答案

Theo library您提到的是 Neo4j REST API 的包装器。使用此类库的好处是它可以处理 JSON 序列化、错误处理、向 HTTP 请求添加正确的 header 等事务。

您可以将 Cypher 与 transactional Cypher REST API endpoint 一起使用像这样使用 Swift(注意:这使用 Alamofire 库来处理 HTTP 请求。):

import Alamofire

let cypherStatement = "CREATE (:Person {name: 'Bob'})-[:LIKES]->(pizza:Food {type: 'Pizza'})<-[:LIKES]-(:Person {name: 'William'}) WITH pizza MATCH (p:Person)-[:LIKES]->(pizz) RETURN p.name AS name"  
let endpoint = "http://localhost:7474/db/data/transaction/commit"
let requestBody = [
        "statements": [
            [
                "statement": cypherStatement
            ]
        ]
    ]
Alamofire.request(.POST, endpoint, parameters: requestBody, encoding: .JSON)
        .responseJSON { response in
            debugPrint(response)
    }

哪些日志:

[Request]: <NSMutableURLRequest: 0x7fafcb637320> { URL:     http://localhost:7474/db/data/transaction/commit }
[Response]: <NSHTTPURLResponse: 0x7fafcb81d480> { URL: http://localhost:7474/db/data/transaction/commit } { status code: 200, headers {
"Access-Control-Allow-Origin" = "*";
"Content-Length" = 91;
"Content-Type" = "application/json";
Date = "Fri, 18 Dec 2015 19:29:41 GMT";
Server = "Jetty(9.2.z-SNAPSHOT)";
} }
[Data]: 91 bytes
[Result]: SUCCESS: {
    errors =     (
    );
    results =     (
                {
            columns =             (
                name
            );
            data =             (
                                {
                    row =                     (
                        Bob
                    );
                },
                            {
                    row =                     (
                        William
                    );
                }
            );
        }
    );
}

编辑

在不使用 Alamofire 的情况下发出相同的请求将如下所示:

let cypherStatement = "CREATE (:Person {name: 'Bob'})-[:LIKES]->(pizza:Food {type: 'Pizza'})<-[:LIKES]-(:Person {name: 'William'}) WITH pizza MATCH (p:Person)-[:LIKES]->(pizz) RETURN p.name AS name"  
let endpoint = "http://localhost:7474/db/data/transaction/commit"
let requestBody = [
        "statements": [
            [
                "statement": cypherStatement
            ]
        ]
    ]

guard let url = NSURL(string: endpoint) else {
            print("Error")
            return true
        }

        let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
        request.addValue("application/json",forHTTPHeaderField: "Content-Type")
        request.addValue("application/json",forHTTPHeaderField: "Accept")

        do{
            let jsonData = try NSJSONSerialization.dataWithJSONObject(requestBody, options: .PrettyPrinted)
            request.HTTPBody = jsonData

            let config = NSURLSessionConfiguration.defaultSessionConfiguration()
            let session = NSURLSession(configuration: config)

            let task = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) in
                let result: NSDictionary
                do {
                    result = try NSJSONSerialization.JSONObjectWithData(data!,
                        options: []) as! NSDictionary
                } catch  {
                    print("error trying to convert data to JSON")
                    return
                }
                print("\(result)")
            })
            task.resume()
        } catch let error as NSError {
            print("JSON serialization error")
            return true
        }

关于swift - 在 Swift 中使用 Neo4j Rest API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34335342/

相关文章:

xcode - 递归和 Xcode 7 编译错误

iOS 从用户文档 Firebase Firestore 存储/更新和检索位置数据

neo4j - 根据图形变化更新 Neo4j 嵌入

neo4j - 这个查询在 neo4j/gremlin 中可行吗?

ios - 为什么 Swift 可选变成零?

ios - PFQueryTableViewController 快速按日期划分

json - 如何从 Groovy 中的 REST 客户端获取 Slurpable 数据?

api - OAuth 2.0 授权类型的正确使用

java - 露天休息,文件上传: cannot set description and filename

neo4j - Cypher shell 无法安装 (Ubuntu 16.04)