-
Notifications
You must be signed in to change notification settings - Fork 2
Request & Response
Requests and responses it's a very long and strange story. When I start to use this API all was great, because I thought that they're use some common design for all requests and all responses. Unfortunately it's not so 😐.
Usually requests has one common structure. It's looks next:
{
"modelName": "model name",
"calledMethod": "method name",
"methodProperties": {... request body ...},
"apiKey": "[your api key]"
}
In our client I call it Envelope and create special interface IRequestEnvelope<> for this. RequestEnvelope<> class are implement IRequestEnvelope<> by default. When we create request envelope instance we need to send also request properties type to this instance. By default we use EmptyRequest, for example:
var request = new RequestEnvelope<EmptyRequest>();
Like requests, responses in our client has envelope too. It represents via IResponseEnvelope<> interface, which implements BaseResponseEnvelope<> abstract class.
On my opinion responses - it's a main Nova Poshta API problem, because it's absolut chaos. Looks like each method was wroten by different developers team, because almost each response are different and unique.
BaseResponseEnvelope<> has only two properties:
- Success - displays that your request was correct and you receive some data from API;
- Data - array of received data;
That's why each API response presented by separated class, which include subclass which represent response data item. Example:
public class GetPayerTypesResponse: BaseResponseEnvelope<GetPayerTypesResponse.PayerType>
{
public class PayerType
{
public string Description { get; set; }
public string Ref { get; set; }
}
}
We put in each response only two common fields, but anybody can add needed properties in needed response by themself.