Skip to content

MStore SDK Referansı / SDK Reference

Sürüm / Version: v0.3.1

İçindekiler / Table of Contents


Türkçe

1. Hangi İstemciyi Kullanmalıyım?

Durum Önerilen istemci Port
Mevcut bir S3 uygulamasını taşıyorsunuz AWS SDK (boto3, AWSSDK.S3, aws-sdk-java, …) 9010
Kimlik doğrulama, IAM, denetim kaydı gerekiyor AWS SDK 9010
Tarayıcıdan doğrudan yükleme/indirme Presigned URL 9010
Maksimum verim, düşük gecikme, toplu işlem MStore gRPC istemcisi 9011
Komut satırı / betikler mstore CLI (sürüm arşivinde) 9011

En kısa yol AWS SDK'sıdır: uç noktayı MStore'a çevirmeniz yeterlidir, kod değişmez. Örnekler: s3-api.md § 7

Güvenlik notu: gRPC portu (9011) istek başına kimlik doğrulaması yapmaz — ulaşan her istek root yetkisiyle çalışır. Yalnızca güvenilir ağdan erişin. Ayrıntı: grpc-api.md

2. gRPC İstemcisi Edinme

MStore gRPC istemcileri şu an genel paket depolarında yayınlanmamaktadır (PyPI, npm, Maven Central, NuGet, crates.io). İki yol vardır:

a) Kendi stub'larınızı üretin — sözleşme bu klasördedir: mstore.proto. Üretim komutları: grpc-api.md § 6

b) Hazır istemci kaynağı isteyin — 6 dilde referans istemci mevcuttur; info@moreum.com adresinden talep edebilirsiniz.

Aşağıdaki bölümler bu referans istemcilerin API yüzeyini belgeler: kurmadan önce entegrasyonun nasıl görüneceğini değerlendirebilirsiniz.

3. Ortak Davranış

Tüm istemciler aynı desenleri paylaşır:

Davranış Değer
Streaming eşiği 4 MiB — bu boyutun altındaki nesneler tek mesajda, üstündekiler otomatik olarak chunk'lanarak gönderilir
Chunk boyutu 4 MiB
Maks. mesaj boyutu 16 MiB (istemci varsayılanı; sunucu 256 MiB kabul eder)
Varsayılan uç nokta localhost:9011

Uygulama kodu put(bucket, key, data) çağırır; küçük/büyük nesne seçimini istemci kendisi yapar.

4. Rust — mstore-client

En geniş yüzeye sahip istemci; multipart ve batch işlemleri de kapsar.

use mstore_client::MStoreClient;

let client = MStoreClient::new("http://127.0.0.1:9011").await?;

client.create_bucket("belgeler").await?;
let out = client.put_object("belgeler", "rapor.pdf", bytes).await?;
let obj = client.get_object("belgeler", "rapor.pdf").await?;
Grup Metotlar
Bağlantı builder(), connect(config), new(endpoint)
Yazma put_object, put_object_with
Okuma get_object, get_object_version, get_object_range, get_object_with
Bilgi head_object, head_object_with, object_exists
Listeleme list_objects, list_objects_prefix, list_objects_with, list_all_objects
Silme delete_object, delete_object_version
Bucket create_bucket, delete_bucket, list_buckets
Multipart create_multipart_upload, upload_part, complete_multipart_upload, abort_multipart_upload
Batch delete_objects, delete_objects_with, put_objects, get_objects, get_objects_with

list_all_objects sayfalamayı sizin yerinize yürütür; object_exists bir head_object çağrısını bool'a indirger.

5. Python — mstore-sdk

from mstore import MStoreClient

with MStoreClient("localhost:9011") as client:
    client.create_bucket("belgeler")
    client.put_object("belgeler", "rapor.pdf", data,
                      content_type="application/pdf",
                      metadata={"proje": "alpha"})
    obj = client.get_object("belgeler", "rapor.pdf")
    for item in client.list_all_objects("belgeler", prefix="2026/"):
        print(item.key, item.size)
Metot Açıklama
MStoreClient(endpoint="localhost:9011", *, secure=False, max_message_size=16MiB) Bağlantı; context manager destekler
put_object(bucket, key, data, *, content_type, storage_class, metadata) 4 MiB üstünde otomatik streaming
get_object(bucket, key, ...) Tam nesneyi belleğe alır
get_object_stream(bucket, key) Chunk chunk okur — büyük nesneler için
head_object(bucket, key) Metadata (indirmeden)
delete_object(bucket, key) Siler / delete marker yazar
list_objects(bucket, ...) Tek sayfa
list_all_objects(bucket, ...) Tüm sayfaları dolaşan üreteç
create_bucket(bucket, *, region="") · delete_bucket(bucket, *, force=False) · list_buckets() Bucket işlemleri
upload_file(...) · download_file(...) Dosya yolu ile kısayol
close() Kanalı kapatır

Gereksinimler: Python ≥ 3.9, grpcio ≥ 1.60, protobuf ≥ 4.25.

6. Go — github.com/mstore/mstore-go

client, err := mstore.NewClient("127.0.0.1:9011")
if err != nil { return err }
defer client.Close()

ctx := context.Background()
if err := client.CreateBucket(ctx, "belgeler"); err != nil { return err }
out, err := client.PutObject(ctx, "belgeler", "rapor.pdf", data)
obj, err := client.GetObject(ctx, "belgeler", "rapor.pdf")
Metot İmza özeti
NewClient(endpoint, opts ...ClientOptions) Bağlantı
Close() Kapatır
PutObject(ctx, bucket, key, data, opts ...PutOptions) *PutObjectOutput
GetObject(ctx, bucket, key, opts ...GetOptions) *GetObjectOutput
GetObjectStream(ctx, bucket, key) io.Reader + *GetStreamMeta
HeadObject(ctx, bucket, key) *HeadObjectOutput
DeleteObject(ctx, bucket, key) *DeleteObjectOutput
ListObjects(ctx, bucket, opts ...ListOptions) *ListObjectsOutput
CreateBucket(ctx, bucket) · DeleteBucket(ctx, bucket, force) · ListBuckets(ctx) Bucket işlemleri

Go ≥ 1.22, google.golang.org/grpc v1.64.

7. Java — com.mstore:mstore-client

try (MStoreClient client = new MStoreClient("127.0.0.1", 9011)) {
    client.createBucket("belgeler");
    PutResult r = client.putObject("belgeler", "rapor.pdf", data);
    GetResult g = client.getObject("belgeler", "rapor.pdf");
    ListResult l = client.listObjects("belgeler", "2026/", "/", 1000);
}
Metot Dönüş
putObject(bucket, key, data) / (…, contentType, storageClass, metadata) PutResult(versionId, etag, requestId)
getObject(bucket, key) / (…, versionId, rangeStart, rangeEnd) GetResult(body, versionId, etag, …)
headObject(bucket, key) HeadResult(versionId, etag, size, …)
deleteObject(bucket, key) DeleteResult(deleteMarker, deleteMarkerId, requestId)
listObjects(bucket, prefix, delimiter, maxKeys) ListResult(objects, commonPrefixes, …)
createBucket · deleteBucket(bucket, force) · listBuckets() — / List<BucketItemResult>
uploadFile(bucket, key, Path) · downloadFile(bucket, key, Path) Dosya kısayolları
close() AutoCloseable

Sabitler: STREAMING_THRESHOLD = 4 MiB, CHUNK_SIZE = 4 MiB.

8. .NET — MStore.Client

using var client = new MStoreClient("http://127.0.0.1:9011");

await client.CreateBucketAsync("belgeler");
var put = await client.PutObjectAsync("belgeler", "rapor.pdf", data);
var get = await client.GetObjectAsync("belgeler", "rapor.pdf");
Metot Dönüş
PutObjectAsync(...) PutObjectResult(VersionId, ETag, RequestId)
GetObjectAsync(...) GetObjectResult
HeadObjectAsync(...) HeadObjectResult
DeleteObjectAsync(...) DeleteObjectResult
ListObjectsAsync(...) ListObjectsResult
CreateBucketAsync · DeleteBucketAsync(bucket, force) · ListBucketsAsync() — / List<BucketItemResult>
UploadFileAsync · DownloadFileAsync Dosya kısayolları
Dispose() IDisposable

net8.0, Grpc.Net.Client 2.63. Sabitler: StreamingThreshold, ChunkSize = 4 MiB.

9. JavaScript / TypeScript — @mstore/sdk

import { MStoreClient } from '@mstore/sdk';

const client = new MStoreClient('127.0.0.1:9011');
await client.createBucket('belgeler');
await client.putObject('belgeler', 'rapor.pdf', buffer, { contentType: 'application/pdf' });
const obj = await client.getObject('belgeler', 'rapor.pdf');
client.close();
Metot Dönüş
putObject(bucket, key, data, opts?) Promise<PutObjectOutput>
getObject(bucket, key, opts?) Promise<GetObjectOutput>
headObject(bucket, key) Promise<HeadObjectOutput>
deleteObject(bucket, key) Promise<DeleteObjectOutput>
listObjects(bucket, opts?) Promise<ListObjectsOutput>
createBucket(bucket, region?) · deleteBucket(bucket, force?) · listBuckets() Promise<void> / Promise<BucketItem[]>
close()

@grpc/grpc-js ^1.10. Node.js için — tarayıcıda gRPC yerine presigned URL kullanın.

10. CLI — mstore

Sürüm arşivinden çıkar, ayrıca kurulum gerektirmez:

mstore mb     mstore://belgeler
mstore cp     rapor.pdf mstore://belgeler/rapor.pdf
mstore ls     mstore://belgeler/
mstore head   mstore://belgeler/rapor.pdf
mstore rm     mstore://belgeler/rapor.pdf
mstore rb     mstore://belgeler
mstore search mstore://belgeler "sözleşme"

İlgili Belgeler


English

1. Which Client Should I Use?

Situation Recommended client Port
Migrating an existing S3 application AWS SDK (boto3, AWSSDK.S3, aws-sdk-java, …) 9010
You need authentication, IAM, audit logging AWS SDK 9010
Direct browser upload/download Presigned URL 9010
Maximum throughput, low latency, batch work MStore gRPC client 9011
Command line / scripts mstore CLI (in the release archive) 9011

The shortest path is an AWS SDK: point the endpoint at MStore and your code is unchanged. Examples: s3-api.md § 7

Security note: the gRPC port (9011) performs no per-request authentication — every request that reaches it runs as root. Only reach it from a trusted network. See grpc-api.md

2. Obtaining a gRPC Client

The MStore gRPC clients are not currently published to public package registries (PyPI, npm, Maven Central, NuGet, crates.io). There are two routes:

a) Generate your own stubs — the contract is in this folder: mstore.proto. Generation commands: grpc-api.md § 6

b) Request the ready-made client source — reference clients exist in six languages; ask at info@moreum.com.

The sections below document those reference clients' API surface, so you can evaluate what an integration would look like before installing anything.

3. Shared Behaviour

Every client shares the same patterns:

Behaviour Value
Streaming threshold 4 MiB — objects below it go in one message, above it are chunked automatically
Chunk size 4 MiB
Max message size 16 MiB (client default; the server accepts 256 MiB)
Default endpoint localhost:9011

Application code calls put(bucket, key, data); the client picks the small-object or streaming path itself.

4. Rust — mstore-client

The widest surface, including multipart and batch operations.

use mstore_client::MStoreClient;

let client = MStoreClient::new("http://127.0.0.1:9011").await?;

client.create_bucket("documents").await?;
let out = client.put_object("documents", "report.pdf", bytes).await?;
let obj = client.get_object("documents", "report.pdf").await?;
Group Methods
Connection builder(), connect(config), new(endpoint)
Write put_object, put_object_with
Read get_object, get_object_version, get_object_range, get_object_with
Info head_object, head_object_with, object_exists
List list_objects, list_objects_prefix, list_objects_with, list_all_objects
Delete delete_object, delete_object_version
Bucket create_bucket, delete_bucket, list_buckets
Multipart create_multipart_upload, upload_part, complete_multipart_upload, abort_multipart_upload
Batch delete_objects, delete_objects_with, put_objects, get_objects, get_objects_with

list_all_objects walks pagination for you; object_exists reduces a head_object call to a bool.

5. Python — mstore-sdk

from mstore import MStoreClient

with MStoreClient("localhost:9011") as client:
    client.create_bucket("documents")
    client.put_object("documents", "report.pdf", data,
                      content_type="application/pdf",
                      metadata={"project": "alpha"})
    obj = client.get_object("documents", "report.pdf")
    for item in client.list_all_objects("documents", prefix="2026/"):
        print(item.key, item.size)
Method Description
MStoreClient(endpoint="localhost:9011", *, secure=False, max_message_size=16MiB) Connection; supports context-manager use
put_object(bucket, key, data, *, content_type, storage_class, metadata) Streams automatically above 4 MiB
get_object(bucket, key, ...) Reads the whole object into memory
get_object_stream(bucket, key) Chunk-by-chunk read — for large objects
head_object(bucket, key) Metadata without downloading
delete_object(bucket, key) Delete / write a delete marker
list_objects(bucket, ...) Single page
list_all_objects(bucket, ...) Generator that walks every page
create_bucket(bucket, *, region="") · delete_bucket(bucket, *, force=False) · list_buckets() Bucket operations
upload_file(...) · download_file(...) File-path shortcuts
close() Closes the channel

Requirements: Python ≥ 3.9, grpcio ≥ 1.60, protobuf ≥ 4.25.

6. Go — github.com/mstore/mstore-go

client, err := mstore.NewClient("127.0.0.1:9011")
if err != nil { return err }
defer client.Close()

ctx := context.Background()
if err := client.CreateBucket(ctx, "documents"); err != nil { return err }
out, err := client.PutObject(ctx, "documents", "report.pdf", data)
obj, err := client.GetObject(ctx, "documents", "report.pdf")
Method Signature summary
NewClient(endpoint, opts ...ClientOptions) Connection
Close() Shut down
PutObject(ctx, bucket, key, data, opts ...PutOptions) *PutObjectOutput
GetObject(ctx, bucket, key, opts ...GetOptions) *GetObjectOutput
GetObjectStream(ctx, bucket, key) io.Reader + *GetStreamMeta
HeadObject(ctx, bucket, key) *HeadObjectOutput
DeleteObject(ctx, bucket, key) *DeleteObjectOutput
ListObjects(ctx, bucket, opts ...ListOptions) *ListObjectsOutput
CreateBucket(ctx, bucket) · DeleteBucket(ctx, bucket, force) · ListBuckets(ctx) Bucket operations

Go ≥ 1.22, google.golang.org/grpc v1.64.

7. Java — com.mstore:mstore-client

try (MStoreClient client = new MStoreClient("127.0.0.1", 9011)) {
    client.createBucket("documents");
    PutResult r = client.putObject("documents", "report.pdf", data);
    GetResult g = client.getObject("documents", "report.pdf");
    ListResult l = client.listObjects("documents", "2026/", "/", 1000);
}
Method Returns
putObject(bucket, key, data) / (…, contentType, storageClass, metadata) PutResult(versionId, etag, requestId)
getObject(bucket, key) / (…, versionId, rangeStart, rangeEnd) GetResult(body, versionId, etag, …)
headObject(bucket, key) HeadResult(versionId, etag, size, …)
deleteObject(bucket, key) DeleteResult(deleteMarker, deleteMarkerId, requestId)
listObjects(bucket, prefix, delimiter, maxKeys) ListResult(objects, commonPrefixes, …)
createBucket · deleteBucket(bucket, force) · listBuckets() — / List<BucketItemResult>
uploadFile(bucket, key, Path) · downloadFile(bucket, key, Path) File shortcuts
close() AutoCloseable

Constants: STREAMING_THRESHOLD = 4 MiB, CHUNK_SIZE = 4 MiB.

8. .NET — MStore.Client

using var client = new MStoreClient("http://127.0.0.1:9011");

await client.CreateBucketAsync("documents");
var put = await client.PutObjectAsync("documents", "report.pdf", data);
var get = await client.GetObjectAsync("documents", "report.pdf");
Method Returns
PutObjectAsync(...) PutObjectResult(VersionId, ETag, RequestId)
GetObjectAsync(...) GetObjectResult
HeadObjectAsync(...) HeadObjectResult
DeleteObjectAsync(...) DeleteObjectResult
ListObjectsAsync(...) ListObjectsResult
CreateBucketAsync · DeleteBucketAsync(bucket, force) · ListBucketsAsync() — / List<BucketItemResult>
UploadFileAsync · DownloadFileAsync File shortcuts
Dispose() IDisposable

net8.0, Grpc.Net.Client 2.63. Constants: StreamingThreshold, ChunkSize = 4 MiB.

9. JavaScript / TypeScript — @mstore/sdk

import { MStoreClient } from '@mstore/sdk';

const client = new MStoreClient('127.0.0.1:9011');
await client.createBucket('documents');
await client.putObject('documents', 'report.pdf', buffer, { contentType: 'application/pdf' });
const obj = await client.getObject('documents', 'report.pdf');
client.close();
Method Returns
putObject(bucket, key, data, opts?) Promise<PutObjectOutput>
getObject(bucket, key, opts?) Promise<GetObjectOutput>
headObject(bucket, key) Promise<HeadObjectOutput>
deleteObject(bucket, key) Promise<DeleteObjectOutput>
listObjects(bucket, opts?) Promise<ListObjectsOutput>
createBucket(bucket, region?) · deleteBucket(bucket, force?) · listBuckets() Promise<void> / Promise<BucketItem[]>
close()

@grpc/grpc-js ^1.10. Node.js only — in the browser use a presigned URL instead of gRPC.

10. CLI — mstore

Extracted from the release archive; no separate installation needed:

mstore mb     mstore://documents
mstore cp     report.pdf mstore://documents/report.pdf
mstore ls     mstore://documents/
mstore head   mstore://documents/report.pdf
mstore rm     mstore://documents/report.pdf
mstore rb     mstore://documents
mstore search mstore://documents "contract"