REST API তে Avro Data Serialization এবং Deserialization

Avro এবং REST API Integration - অ্যাপাচি অভ্র (Avro) - Big Data and Analytics

376

Avro ফরম্যাটটি ব্যাপকভাবে ব্যবহৃত হয় ডেটা সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশনের জন্য, বিশেষত REST APIs-এর মধ্যে। যখন RESTful সার্ভিসে ডেটা আদান-প্রদান করতে হয়, তখন Avro ফরম্যাটের মাধ্যমে ডেটার গঠন সংরক্ষণ, কম্প্যাক্ট ডেটা ট্রান্সফার, এবং স্কিমার ভিত্তিতে ডেটা প্রসেসিং করা হয়।

Avro Serialization এবং Avro Deserialization এর মাধ্যমে আমরা ডেটাকে একটি নির্দিষ্ট ফরম্যাটে রূপান্তর করি যা সহজে ট্রান্সফারযোগ্য এবং পড়া/লিখা সহজ করে তোলে। REST API তে এই প্রক্রিয়াটি সাধারণত HTTP POST, GET, PUT, DELETE রিকোয়েস্টের মাধ্যমে সম্পাদিত হয়।


Avro Data Serialization এবং Deserialization কী?

  • Serialization: ডেটাকে বাইনারি বা JSON ফরম্যাটে রূপান্তর করার প্রক্রিয়া, যা সহজে সংরক্ষণ বা ট্রান্সফার করা যায়।
  • Deserialization: সিরিয়ালাইজড ডেটাকে পুনরায় অরিজিনাল অবজেক্টে রূপান্তর করার প্রক্রিয়া।

Avro ব্যবহারের মাধ্যমে ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার সময়, স্কিমার ডিফাইন করা থাকে, যা ডেটার গঠন সঠিকভাবে নির্ধারণ করে।


REST API তে Avro Data Serialization

REST API তে Avro Serialization করতে, আপনাকে প্রথমে Avro স্কিমা তৈরি করতে হবে এবং তারপর ডেটাকে সেই স্কিমা অনুযায়ী সিরিয়ালাইজ করতে হবে। এখানে একটি উদাহরণ দেওয়া হলো যেখানে JSON অবজেক্টকে Avro ফরম্যাটে সিরিয়ালাইজ করা হচ্ছে।

১. Avro স্কিমা তৈরি

Avro স্কিমা একটি JSON ফাইল আকারে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, যদি আমরা একটি User অবজেক্ট (যার মধ্যে name এবং age ফিল্ড থাকে) তৈরি করতে চাই, তবে স্কিমা কিছু এমন হতে পারে:

{
  "type": "record",
  "name": "User",
  "fields": [
    {
      "name": "name",
      "type": "string"
    },
    {
      "name": "age",
      "type": "int"
    }
  ]
}

২. Avro Serialization কোড (Java Example)

Java-তে Avro ব্যবহার করে ডেটা সিরিয়ালাইজ করতে নিচের কোড অনুসরণ করা যায়। প্রথমে আপনাকে Avro স্কিমা ব্যবহার করে অবজেক্ট সিরিয়ালাইজ করতে হবে।

import org.apache.avro.Schema;
import org.apache.avro.generic.GenericData;
import org.apache.avro.io.Encoder;
import org.apache.avro.io.EncoderFactory;
import org.apache.avro.specific.SpecificDatumWriter;
import org.apache.avro.io.DatumWriter;

import java.io.ByteArrayOutputStream;

public class AvroSerializationExample {

    public static byte[] serializeUser(String name, int age) throws Exception {
        // Load the Avro schema
        String schemaString = "{\"type\": \"record\", \"name\": \"User\", \"fields\": [{\"name\": \"name\", \"type\": \"string\"}, {\"name\": \"age\", \"type\": \"int\"}]}";
        Schema schema = new Schema.Parser().parse(schemaString);

        // Create a Generic Record based on the schema
        GenericData.Record user = new GenericData.Record(schema);
        user.put("name", name);
        user.put("age", age);

        // Serialize the user record into a byte array
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        DatumWriter<GenericData.Record> datumWriter = new SpecificDatumWriter<>(schema);
        Encoder encoder = EncoderFactory.get().binaryEncoder(byteArrayOutputStream, null);
        datumWriter.write(user, encoder);
        encoder.flush();
        return byteArrayOutputStream.toByteArray();
    }

    public static void main(String[] args) throws Exception {
        byte[] serializedData = serializeUser("John Doe", 30);
        System.out.println("Serialized Avro Data: " + new String(serializedData));
    }
}

এখানে, GenericData.Record ব্যবহার করে Avro ডেটা সিরিয়ালাইজ করা হয়েছে এবং DatumWriter এবং Encoder ব্যবহার করা হয়েছে বাইনারি ডেটা তৈরি করতে। এই ডেটাটি এখন REST API তে ট্রান্সফার করা যাবে।


REST API তে Avro Data Deserialization

REST API তে Avro Data Deserialization করার জন্য আপনাকে প্রথমে সিরিয়ালাইজড বাইনারি ডেটা গ্রহণ করতে হবে, তারপর সেটিকে পূর্বনির্ধারিত Avro স্কিমা ব্যবহার করে অবজেক্টে রূপান্তর করতে হবে।

১. Avro Deserialization কোড (Java Example)

import org.apache.avro.Schema;
import org.apache.avro.generic.GenericData;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.DecoderFactory;
import org.apache.avro.specific.SpecificDatumReader;

import java.io.ByteArrayInputStream;

public class AvroDeserializationExample {

    public static GenericData.Record deserializeUser(byte[] data) throws Exception {
        // Load the Avro schema
        String schemaString = "{\"type\": \"record\", \"name\": \"User\", \"fields\": [{\"name\": \"name\", \"type\": \"string\"}, {\"name\": \"age\", \"type\": \"int\"}]}";
        Schema schema = new Schema.Parser().parse(schemaString);

        // Deserialize the byte array back into a Generic Record
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);
        SpecificDatumReader<GenericData.Record> datumReader = new SpecificDatumReader<>(schema);
        Decoder decoder = DecoderFactory.get().binaryDecoder(byteArrayInputStream, null);
        return datumReader.read(null, decoder);
    }

    public static void main(String[] args) throws Exception {
        byte[] serializedData = // get serialized data from REST API
        GenericData.Record user = deserializeUser(serializedData);
        System.out.println("Deserialized User: " + user);
    }
}

এখানে, SpecificDatumReader এবং Decoder ব্যবহার করে আমরা বাইনারি ডেটা ডেসিরিয়ালাইজ করছি এবং আগের User অবজেক্টে রূপান্তর করছি।


REST API তে Avro ডেটার সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন

REST API তে Avro ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করতে, সাধারণত HTTP POST, GET, PUT বা DELETE রিকোয়েস্টের মাধ্যমে ডেটা আদান-প্রদান করা হয়। নিচে Avro সিরিয়ালাইজড ডেটা পাঠানোর একটি উদাহরণ দেখানো হলো।

১. POST রিকোয়েস্টে Avro ডেটা পাঠানো

import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;

public class AvroRestClient {

    public static void sendAvroData(byte[] avroData) throws Exception {
        URL url = new URL("http://localhost:8080/api/avrodata");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/avro");
        connection.setDoOutput(true);
        
        OutputStream os = connection.getOutputStream();
        os.write(avroData);
        os.flush();
        os.close();
        
        int responseCode = connection.getResponseCode();
        System.out.println("POST Response Code: " + responseCode);
    }
    
    public static void main(String[] args) throws Exception {
        byte[] avroData = AvroSerializationExample.serializeUser("John Doe", 30);
        sendAvroData(avroData);
    }
}

এখানে, আমরা Avro ডেটাকে HTTP POST রিকোয়েস্টের মাধ্যমে REST API তে পাঠাচ্ছি। Content-Type হিসেবে application/avro ব্যবহার করা হচ্ছে।

২. GET রিকোয়েস্টে Avro ডেটা গ্রহণ করা

import java.net.HttpURLConnection;
import java.net.URL;
import java.io.InputStream;

public class AvroRestClient {

    public static void receiveAvroData() throws Exception {
        URL url = new URL("http://localhost:8080/api/avrodata");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.setRequestProperty("Accept", "application/avro");

        InputStream is = connection.getInputStream();
        byte[] avroData = is.readAllBytes();
        is.close();
        
        GenericData.Record user = AvroDeserializationExample.deserializeUser(avroData);
        System.out.println("Received User: " + user);
    }
    
    public static void main(String[] args) throws Exception {
        receiveAvroData();
    }
}

এখানে, আমরা GET রিকোয়েস্টের মাধ্যমে Avro ডেটা গ্রহণ করছি এবং ডেসিরিয়ালাইজ করে ব্যবহার করছি।


সারাংশ

Avro Serialization এবং Deserialization REST API তে ডেটা আদান-প্র

দান করার একটি গুরুত্বপূর্ণ অংশ। Avro ফরম্যাটের মাধ্যমে কমপ্যাক্ট ডেটা ট্রান্সফার এবং ডেটার গঠন সংরক্ষণ করা যায়। REST API তে Avro ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার মাধ্যমে আপনি স্কিমা ভিত্তিক ডেটা প্রসেসিং এবং ইন্টিগ্রেশন করতে পারেন, যা একটি সুরক্ষিত, দক্ষ এবং কার্যকরী ডেটা আদান-প্রদান ব্যবস্থার জন্য অপরিহার্য।

Content added By
Promotion

Are you sure to start over?

Loading...