API ir Java pavyzdžiai

API ir Java pavyzdžiai

OpenAPI adresas pateikiamas čia: RIVILE ERP_API(Swagger UI)

Kodo pavyzdys

Užduotis: Suformuoti pardavimų sąskaitos sukūrimą ir registravimą, naudojant POST užklausą į Rivile REST API.

Su viena užklausa galima sukurti dokumentą su eilutėmis, kai eilučių kiekis yra <= 100. Jei norite sukurti dokumentą su > 100 eilučių, rekomenduojame pirma sukurti dokumentą ir vėliau atskiromis užklausomis kurti dokumento eilutes.

Naudojant suformuotą pavyzdį naudoti savo API raktą ( <Jūsų_API_Raktas> ).

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpHeaders;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;  // Galima naudoti ir kitą biblioteką JSON apdorojimui

public class RivileApiRequest {
    public static void main(String[] args) {
        // Rivile Public REST API URL
        String url = "https://erp.rivile.cloud/public-api/v1/sale-invoices";

        // API rakto tokenas. Jį sukurti ir pasiimti galite iš Rivile ERP sistemos.
        String apiKey = "<Jūsų_API_Raktas>";

        // Sukuriame pardavimų sąskaitos duomenų objektą JSON formatu
        Map<String, Object> data = new HashMap<>();
        data.put("clientId", "3fa85f64-5717-4562-b3fc-2c963f66afa6");
        data.put("clientName", "Rivilė, UAB");
        data.put("documentNo", "ERP-002365");
        data.put("isTaxIncluded", false);
        data.put("currencyCode", "EUR");
        data.put("notes", "Sąskaita iš elektroninės parduotuvės");

        // Sukuriame sąskaitos eilutes
        Map<String, Object> lineItem = new HashMap<>();
        lineItem.put("itemCode", "SM-S928BZYHEUB");
        lineItem.put("itemName", "Samsung Galaxy S21 Ultra");
        lineItem.put("uomAltCode", "VNT");
        lineItem.put("qtyAlt", 1);
        lineItem.put("price", 1000.00);
        lineItem.put("departmentCode", "SAND1");

        // Pridedame eilutę į pardavimų sąskaitą
        data.put("lines", new Map[]{lineItem});

        // Konvertuojame duomenis į JSON formatą
        Gson gson = new Gson();
        String jsonData = gson.toJson(data);

        // Sukuriame HttpClient užklausą
        HttpClient client = HttpClient.newHttpClient();

        // Sukuriame POST užklausą
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url))
                .header("X-SessionToken", apiKey)
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(jsonData, StandardCharsets.UTF_8))
                .build();

        try {
            // Įvykdome užklausą ir gauname atsakymą
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

            // Patikriname atsakymo kodą ir atvaizduojame atsakymą
            if (response.statusCode() == 200) {
                System.out.println("Atsakymas: " + response.body());
            } else {
                System.out.println("Klaida: " + response.statusCode() + " - " + response.body());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

GET sąrašiniuose metoduose duomenų filtravimas

Galimas duomenų filtravimas, kuris leidžia sujungti kelis filtrus juos jungiant loginę funkciją AND .

Filtravimui galimi naudoti operatoriai:

  • CONTAINS: Tikrina, ar laukas turi nurodytą tekstą.
  • NOT_CONTAINS: Tikrina, ar laukas neturi nurodyto teksto.
  • EQUAL: Tikrina, ar laukas yra lygus nurodytam tekstui, skaičiui arba loginei reikšmei.
  • NOT_EQUAL: Tikrina, ar laukas nėra lygus nurodytam tekstui arba skaičiui.
  • GREATER_THAN: Tikrina, ar laukas yra didesnis nei nurodytas skaičius.
  • STARTS_WITH: Tikrina, ar laukas prasideda nurodytu tekstu.
  • ENDS_WITH: Tikrina, ar laukas baigiasi nurodytu tekstu.

Pavyzdys:

Užduotis: Vykdyti filtravimą klientų, kurių pavadinime yra fragmentas "Demo" ir jie yra aktyvūs.

API filtrų sąlyga:

[
  {    "operation": "CONTAINS",    "name": "name",    "value": "Demo"  } ,
  {    "operation": "EQUAL",    "name": "active",    "value": true  } 
]

Vykdant užklausą filtro reikšmę reikia užkoduoti (Encode).

API filtro rezultatas:

GET {{baseUrl}}/v1/clients?size=30&page=0&filter=%7B%22operation%22%3A%22CONTAINS%22%2C%22name%22%3A%22name%22%2C%22value%22%3A%22Demo%22%7D%2C%7B%22operation%22%3A%22EQUAL%22%2C%22name%22%3A%22active%22%2C%22value%22%3Atrue%7D

Kodas, skirtas sukurti filtrą ir suformuoti GET užklausą:

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class ApiFilterExample {
    public static void main(String[] args) throws UnsupportedEncodingException {
        // JSON filtro sąlygų konvertavimas į eilutę
        String filters = "[{\"operation\":\"CONTAINS\",\"name\":\"name\",\"value\":\"Demo\"},"
                + "{\"operation\":\"EQUAL\",\"name\":\"active\",\"value\":true}]";

        // Filtro eilutės konvertavimas į URL formatą
        String urlEncodedFilter = URLEncoder.encode(filters, StandardCharsets.UTF_8.toString());

        // Filtro apjungimas su puslapiavimo parametrais
        String queryParams = "?size=30&page=0&filter=" + urlEncodedFilter;

        // Pilnos GET užklausos sukonstravimas
        String baseUrl = "https://erp.rivile.cloud/public-api/v1/clients";
        String fullUrl = baseUrl + queryParams;
        System.out.println(fullUrl);

        // Jei norite išsiųsti užklausą (su HttpClient biblioteka)
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(fullUrl))
                .build();
        client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
                .thenApply(HttpResponse::body)
                .thenAccept(System.out::println)
                .join();
    }
}

Užklausose įrašų skaičius negali viršyti 100 !

API