> On 17 May 2019, at 12:15, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> 
>> As a related question - how would I know to use #addPart: vs: #formAt: ?
> 
> By knowing/understanding a bit more about HTTP ? ;-)

As I wrote in my reply to Ben: 

Although curl is powerful, well known and well supported, I would not say it is 
a great standard for interface design, it is way too complex. 

Zn tries to approach HTTP from an object design standpoint. You pass along a 
ZnMultiPartFormDataEntity object that contains ZnMimeParts as entity to your 
POST request.

HTTP transfers resources or entities between a client and a server using a 
limited set of verbs (ZnMessage subclasses ZnRequest and ZnResponse). Headers 
(ZnHeaders) contain meta data about HTTP messages.

Simplified, with a GET you request a resource, with a DELETE you remove a 
resource, with POST you create a new resource and with PUT/PATCH you update an 
existing resource.

Resources/entities can be anything, they are described by mime types 
(ZnMimeType) and identified by URLs/URIs (ZnUrl).

Zn models them as subclasses of ZnEntity. The most fundamental ones are 
ZnStringEntity for text based data and ZnByteArrayEntity for binary data. 
ZnStreamEntity is a special variant that support streaming transfers.

From the world of HTML (not HTTP !), more specifically, Forms, there are 2 
popular resources/entities: ZnApplicationFormUrlEncodedEntity and 
ZnMultiPartFormDataEntity. These have structure that is also exposed as an API 
- and for which there is some extra support in ZnClient.

Most real REST APIs use JSON or XML for their payloads (see the #forJsonREST 
method for example).

HTH,

Sven


Reply via email to