Netsis Dokümantasyonu

Kimlik doğrulama

NetOpenX REST, OAuth2 "resource owner password" akışına benzer bir token kullanır. Token şirkete ve şubeye bağlıdır: hangi şirketle işlem yapılacağı token alınırken belirlenir.

Ham HTTP

POST /api/v2/token HTTP/1.1
Host: netsis-sunucu:7070
Content-Type: application/x-www-form-urlencoded

grant_type=password&branchcode=0&username=NETSIS&password=SIFRE&dbname=ACME2024&dbuser=TEMELSET&dbpassword=&dbtype=0
Alan Anlamı
grant_type Her zaman password
branchcode Şube kodu
username, password Netsis kullanıcı adı ve şifresi
dbname Şirket (veritabanı) adı
dbuser, dbpassword Veritabanı kullanıcısı (çoğunlukla TEMELSET) ve şifresi
dbtype Veritabanı tipi; 0 = MSSQL (örneklerde böyle kullanılır, doğrulanmadı)

Başarılı yanıt JSON'dur ve access_token içerir (standart OAuth2 alanları beklenir: access_token, token_type, expires_in; tam alan listesi doğrulanmadı). Sonraki her istekte:

GET /api/v2/ARPs?limit=5 HTTP/1.1
Authorization: Bearer <access_token>

Hatalı girişte standart OAuth2 hata gövdesi döner:

{"error":"invalid_grant","error_description":"Hata Kodu : 401\r\nDetay : Login Failed ..."}

GET ile token istenirse unsupported_grant_type döner.

curl

TOKEN=$(curl -s -X POST http://localhost:7070/api/v2/token \
  -d grant_type=password -d branchcode=0 -d username=NETSIS -d password=SIFRE \
  -d dbname=ACME2024 -d dbuser=TEMELSET -d dbpassword= -d dbtype=0 | jq -r .access_token)

curl -H "Authorization: Bearer $TOKEN" "http://localhost:7070/api/v2/ARPs?limit=5"

Python

import requests

BASE = "http://localhost:7070/api/v2"
r = requests.post(f"{BASE}/token", data={
    "grant_type": "password", "branchcode": 0,
    "username": "NETSIS", "password": "SIFRE",
    "dbname": "ACME2024", "dbuser": "TEMELSET", "dbpassword": "", "dbtype": 0,
}, timeout=30)
r.raise_for_status()
token = r.json()["access_token"]

s = requests.Session()
s.headers["Authorization"] = f"Bearer {token}"
cariler = s.get(f"{BASE}/ARPs", params={"limit": 5}).json()

Token gerektirmeyen uçlar

Uç Döner
GET api/v2/public/Ping "<tarih saat> > OK"
GET api/v2/public/Version NetOpenX sürümü
GET api/v2/public/AuthorizedBranches?company={company}&username={username} Kullanıcının yetkili şubeleri
GET api/v2/HealthCheck Kernel oluşturma testi
GET api/v2/help, api/v2/helpinfo?apiId=... Yardım sayfaları

Token isteyen hafif kontrol ucu: GET api/v2/ping (token yoksa 401). Bağlantı testi için idealdir.

Oturumu kapatma

GET api/v2/revoke (token ile). Kapatılmazsa token süresi dolunca kendiliğinden geçersiz olur.

C#: NetOpenX.Rest.Client

Logo'nun .NET istemci kütüphanesi NetOpenX.Rest.Client.dll token işini sarmalar.

using NetOpenX.Rest.Client;
using NetOpenX.Rest.Client.BLL;
using NetOpenX.Rest.Client.Model;
using NetOpenX.Rest.Client.Model.Enums;
using NetOpenX.Rest.Client.Model.NetOpenX;

var oAuth2 = new oAuth2("http://localhost:7070");
oAuth2.Login(new JLogin
{
    BranchCode     = 0,
    NetsisUser     = "NETSIS",
    NetsisPassword = "SIFRE",
    DbType         = JNVTTipi.vtMSSQL,
    DbName         = "ACME2024",
    DbUser         = "TEMELSET",
    DbPassword     = ""
});
string token = oAuth2.AccessToken;

var arps = new ARPsManager(oAuth2);
var sonuc = arps.GetInternal(new SelectFilter { Limit = 5 });

JLogin alanları: BranchCode, NetsisUser, NetsisPassword, DbType, DbName, DbUser, DbPassword, HashCode (anlamı belgelenmemiş). oAuth2 üyeleri: Login(JLogin), LogOut(), AccessToken, TimeOut, AllowCompress, ChangeHeader olayı.

TokenSafeOperation

Token süresi dolduğunda yeniden giriş yapıp işlemi tekrarlayan yardımcı:

TokenRestSettings.Init("http://localhost:7070", 120, true);   // 2. ve 3. parametre belgelenmemiş

var safeOp = new TokenSafeOperation(new JLogin { /* ... */ });
var result = safeOp.Exec<List<CasaBit>>(token =>
{
    var q = token.CreateManager<QueryManager>();
    return q.GetInternal("select top 2 * from TBLCASABIT");
});

Aynı blok içinde birden fazla yönetici (CreateManager<T>()) kullanılabilir. Yeniden deneme davranışı kaynak koddan çıkarılmıştır; Logo dokümanında açıkça yazılmaz.

Ham çağrı (RequestManager)

var req = new RequestManager(oAuth2) { Method = "GET", Path = "api/v2/ARPs?limit=5" };
string json = req.GetResult();

Pratik öneriler

  • Tokenı önbelleğe alın ve süresi dolmadan yenileyin. Örnek projelerdeki "her işlemde yeniden login" deseni yavaştır ve lisans/oturum tüketir.
  • 401 aldığınızda bir kez yeniden login olup isteği tekrarlayın; yazma isteklerinde tekrar etmeden önce kaydın oluşmadığını kontrol edin (idempotency).
  • Kimlik bilgilerini koda ve depoya koymayın.