Form Support in LRest
Most of the time, I would prefer to post JSON
data as Content-Type
, since I can make client code simple yet powerful. It is easier to deal with nesting, encoding, type-casting with application/json
, however when it comes to file uploading, we’ll have to encode the binary data in order to put it in a JSON object, and format like base64 encoding will make the HTTP
payload bigger. If we do care about performance here, we may use multipart/form-data
instead.
Recently I added multipart/form support in LRest
. It’s still in the early stage but the goal is still to keep it easy to use. Here is an example:
var dict = complaint.dictionary
let client = ICRestClient<ICResultModel>(api:IC.api.complaint_list, parameters:dict)
client.method = .Post
if let data = data_image {
client.content_type = LRest.content.form
client.form_keys = ["file"]
client.form_data = [data]
}
In this case, LRest.content.form
replaces the default content_type, which is LRest.content.json
(I’ll change it to enum later since it’s better supported in Swift
), and key/data pairs are assigned to the client itself directly. Currently the data type is hard-coded as image/jpeg
which should be set by user, or determined by LRest
.
Parameter
support is not as good as JSON either. Array
objects cannot be nested, and value.description is used for all the other objects. It’s not hard to fix these issues, and I’ll start working on them when it’s needed.
Tags: