Mesaj sistemi için Sqlite3 uygun mudur?

API gibi bir bağlantı mı yapmalıyım? Program bilgisayarda olacak bu arada.

1 Beğeni

O konu hakkında bir bilgim yok. Orası sana kalmış. :sweat_smile:

1 Beğeni

Anladım. Ben popüler mesajlaşma sistemlerinin kullandığı alt yapıları bir inceleyeyim. Ona göre devam edeyim. Teşekkür ederim. İyi akşamlar dilerim.

1 Beğeni

Mesajlardan değil kullanıcı verilerinden bahsediyorum. Kullanıcı adı - şifre yani authorization işlemi için gerekli bilgiler. Bunları veritabanı şeklinde uygulamanın yanında dağıtamazsınız, dağıtılmamalı.

2 Beğeni

Tamamdır ben dediğinizi yanlış anlamışım. Aydınlattığınız için teşekkürler.

1 Beğeni

öncelikle neden mysql kullanmıyorsun illahi sqlite mi kullanmanız gerek anlamadığım konu bu?

Öncelikle bir şey daha belirtmek istiyorum.

Şifrelerin sunucuda saklanması yetmez, şifreler değil, şifrelerin hash leri sunucuda tutulmalı. Sanırım daha önce forumda konşuldu. şifre kontrolu yapılırken de önce girilen değer hash fonksiyonu ile hash haline gelmeli, daha sonra ise bu iki hash in aynı olup olmadığı kontrol edilmeli. Mesela yemek sepeti böyle yapıyordu diye biliyorum. Herhangi bir kişi seni hacklerse eline direkt şifreler geçmemeli. Eğer şifreler hash şeklinde tutulursa hash lerden şifreler yeniden elde edilemez. Kısaca

:heavy_check_mark: Şifre —> hash
:x: Hash —> Şifre

Bu arada yukarıda yazmışlar zaten ama bir de ben söylemek istiyorum. sqlite vs. lerinin nasıl bir mekanizma kullandığını bilmemekle beraber eğer şifreler sunucuda değil de bende olursa hiç olmadı binary dosyalardan stringleri toplamak için strings komutu yazarım keyfime bakarım, bu çok tehlikeli.
mesela ben linuxda strings komutu falan uygularım çok kolay çekebilirim şifreleri, pattern i ezberledim mi tamadır bu iş. Aşağıda bir örnek var.

$ strings victim
/lib64/ld-linux-x86-64.so.2
libc.so.6
strcpy
__cxa_finalize
__libc_start_main
GLIBC_2.2.5
_ITM_deregisterTMCloneTable
__gmon_start__
_ITM_registerTMCloneTable
u+UH
[]A\A]A^A_
:*3$"
GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
victim.c
victim.c
/home/cihat/Desktop/hacks
long unsigned int
GNU C17 9.3.0 -mtune=generic -march=x86-64 -g -fno-stack-protector -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection
short unsigned int
argc
name
main
data
char
argv
crtstuff.c
deregister_tm_clones
__do_global_dtors_aux
completed.8060
__do_global_dtors_aux_fini_array_entry
frame_dummy
__frame_dummy_init_array_entry
victim.c
__FRAME_END__
__init_array_end
_DYNAMIC
__init_array_start
__GNU_EH_FRAME_HDR
_GLOBAL_OFFSET_TABLE_
__libc_csu_fini
_ITM_deregisterTMCloneTable
strcpy@@GLIBC_2.2.5
_edata
__libc_start_main@@GLIBC_2.2.5
__data_start
__gmon_start__
__dso_handle
_IO_stdin_used
__libc_csu_init
__bss_start
main
__TMC_END__
_ITM_registerTMCloneTable
__cxa_finalize@@GLIBC_2.2.5
.symtab
[. . . ]
3 Beğeni

İşte hocam sorun bu zaten. Sqlite3 ile uzaktan bir veri çekemiyorum, verilerin kullanıcının bilgisayarında olması gerekiyor.

Peki neden çekemiyorsunuz?

Sqlite3 verileri db dosyası içerisinde barınmıyor mu? Benim bildiğim API gibi bir yöntem yok Sqlite3’de.

Kendin oluşturabilirsin aslında bir api. Sqlite da api olmasına gerek yok. Flask ile api oluşturabilirsin diye düşünüyorum.

Artık çalışmıyor ama ben zamanında uygulamada kullanırım diye şöyle bir çok basit api yazmıştım basit_tdk_server.py · GitHub

Tabi ben bu konuda pek bilirkişi değilim, ama ben olsaydım flask ı bir denerdim. Tabi flask şart değil, bir sürü framework var.

Sadece bir fikir benimki.

2 Beğeni

En başta da dediğim gibi veritabanınızı bir server arkasına koyup HTTP protokolü ile ihtiyaçlara cevap verecek hale getirebilirsiniz. Örneğin Django varsayılan olarak sqlite3 kullanır ve istemcilerde veritabanı yoktur. Django server ayağa kaldırılır, giriş yapmak için http://site.com/api/auth-login/ gibi bir URL’e istek atılır ve Django bu isteği değerlendirir. Bilgiler doğruysa 200, değilse 401 unauthorized cevabı döner.

İllaki sqlite3 veritabanına direkt bağlanıp SQL sorgusu ile bilgilerin doğru olup olmadığını kontrol etmek zorunda değilsiniz. Bir web framework ile çalışabilirsiniz. Örneğin Django.

3 Beğeni

Çok mantıklı. Bunu kullanabilirsin @Grata. İnternette bu konuyla ilgili çok fazla bilgi var diye biliyorum. Rahat bir şekilde halledebilirsin.

2 Beğeni

Teşekkür ederim. Denedikten sonra yazacağım buraya.

Peki bunun için bir rehber yazısı vb. var mı?

API için soruyorsanız Django Rest Framework kullanarak gayet sağlam ve genişletilebilir bir API oluşturabilirsiniz. Yok ben Django öğrenemem basit bir şey olsun diyorsanız FastAPI kullanmak isteyebilirsiniz. https://fastapi.tiangolo.com/

Bir arayüz olmayacak sanırım sizin projenizde. Sadece bilgileri doğrulayabileceğiniz bir API oluşturacaksınız. Python kullanarak API oluşturmak kolay, bir sürü de kaynak var zaten. Doğru kelimelerle araştırma yaparsanız size yol gösterecek bir sürü yazı, örnek vs bulabilirsiniz.

2 Beğeni

Hocam bir şey daha sormak istiyorum. Yeni kullanıcı kaydı oluşturulduğunda, API’ye yeni kullanıcı kaydı gönderebilir miyim? Yani sorgulanacak kullanıcı adı ve şifreyi.

Mesela konsoldan kayıt oldu. API’ye gönderebilir miyiz bu bilgileri? Ve API bunun için uygun olur değil mi?

Evet. Bilgileri POST metoduyla göndererek sunucuya iletirsiniz, sunucu da bilgileri veritabanına ekler.

Genel algoritma şu şekilde olacak değil mi?

Bilgileri postladık
Postlama ile veritabanına ekleme kodunu çalıştırdık(INSERT INTO)

Post’a veri tabanına bilgi ekleme kodunu atayacağım. Değil mi?

Evet genel olarak mantık böyle diyebiliriz. ORM sayesinde SQL kodu yazmadan da veritabanı kullanabilirsiniz.

2 Beğeni