This is a simple lib to work with CouchDB in Swift.
The only dependency for this lib is async-http-client
You can find docs, examples and even tutorials here.
Add to the dependencies
value of your Package.swift
.
dependencies: [
.package(url: "https://github.com/makoni/couchdb-vapor.git", from: "1.2.0"),
]
// use default params
let myClient = CouchDBClient()
// provide your own params
let couchDBClient = CouchDBClient(
couchProtocol: .http,
couchHost: "127.0.0.1",
couchPort: 5984,
userName: "admin",
userPassword: "myPassword"
)
If you don’t want to have your password in the code you can pass COUCHDB_PASS
param in your command line. For example you can run your Server Side Swift project:
COUCHDB_PASS=myPassword /path/.build/x86_64-unknown-linux-gnu/release/Run
Just use initializer without userPassword param:
let couchDBClient = CouchDBClient(
couchProtocol: .http,
couchHost: "127.0.0.1",
couchPort: 5984,
userName: "admin"
)
Define your document model:
// Example struct
struct ExpectedDoc: CouchDBRepresentable {
var name: String
var _id: String?
var _rev: String?
}
var testDoc = ExpectedDoc(name: "My name")
try await couchDBClient.insert(
dbName: "databaseName",
doc: &testDoc
)
print(testDoc) // testDoc has _id and _rev values now
// get data from a database by document ID
var doc: ExpectedDoc = try await couchDBClient.get(fromDB: "databaseName", uri: "documentId")
print(doc)
// Update value
doc.name = "Updated name"
try await couchDBClient.update(
dbName: testsDB,
doc: &doc
)
print(doc) // doc will have updated name and _rev values now
Delete data:
let response = try await couchDBClient.delete(fromDb: "databaseName", doc: doc)
// or by uri
let response = try await couchDBClient.delete(fromDb: "databaseName", uri: doc._id,rev: doc._rev)
Get all databases example:
let dbs = try await couchDBClient.getAllDBs()
print(dbs)
// prints: ["_global_changes", "_replicator", "_users", "yourDBname"]
Find documents in a database by selector:
let selector = ["selector": ["name": "Sam"]]
let docs: [ExpectedDoc] = try await couchDBClient.find(in: "databaseName", selector: selector)
print(docs)
Here's a simple tutorial for Vapor.
link |
Stars: 11 |
Last commit: 1 week ago |
async-http-client
minimum version to the new 1.21.0. If you can't use it in your project you can stay on 1.4.0.HTTPClient.shared
(new in async-http-client
1.21.0) internally for requests if no EventLoopGroup
is provided.httpClient.syncShutdown()
in case of HTTPClient.shared
usage.Full Changelog: https://github.com/makoni/couchdb-vapor/compare/1.4.0...1.5.0
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics