{"id":1721628,"user_name":null,"score":0,"text":"Hej! Zazwyczaj pisz\u0119 programy i czasem korzystam z jakiego\u015b API, tym razem jednak musz\u0119 stworzy\u0107 zar\u00f3wno API jak i program. Nie jest to dla mnie ca\u0142kiem obcy temat, ale chcia\u0142bym zrobi\u0107 to lepiej ni\u017c zwykle (a zwykle robi\u0142em amatorke, zwracanie liczb rozdzielonych \u015brednikami itd.). Zaczynam od prostego 'chatu' z logowaniem i rejestracj\u0105, uzna\u0142em, \u017ce taki chat jest prosty ale jednocze\u015bnie b\u0119dzie dobra podstawa \u017ceby co\u015b ju\u017c popracowa\u0107.\n\n**Endpointy w API:**\n* User\/Create - przyjmuje login i has\u0142o,  dodaje do bazy nowego u\u017cytkownika, zwraca kod b\u0142\u0119du\/powodzenia\n* User\/CreateToken - przyjmuje login i has\u0142o, zwraca token\n* User\/ReleaseToken - 'wylogowanie', wyczyszczenie pola z tokenem\n* Chat\/Check - zwraca najwi\u0119kszy messageID\n* Chat\/Read - zwraca wiadomo\u015bci z messageID > przeslaneMessageID\n* Chat\/Send - dodaje do bazy wiadomo\u015b\u0107*\nz tych plik\u00f3w odnosz\u0119 si\u0119 do innego - database - gdzie mam realizowane po\u0142\u0105czenie i wklepane dane\n\n**Tabele w bazie:**\n* users - userID, login, pass, token\n* messages - messageID, senderID, message\n\n**Uwagi:**\n* Request przyjmuje dane w formie jsona\n* Request zwraca dane w formie jsona\n* Has\u0142o odkodowuj\u0119 poprzez base64_encode - dzi\u0119ki czemu w reque\u015bcie nie przesy\u0142am \u017cywcem has\u0142a tekstem - wiem, \u017ce to \u017cadne zabezpieczenie, no ale zawsze lepiej to wygl\u0105da chyba\n* Token generowany jest poprzez proste md5(uniqid())\n* Mam \u0142adne adresy przez RewriteRule w htaccess\n* Przed klepaniem apki testowa\u0142em endpointy Postmanem\n* Celowo nie korzystam z oauth\n* Celowo nie korzystam z framework\u00f3w\n\n**Pytania:**\n* Czasem obok tokena wysy\u0142am w reque\u015bcie userID, \u017ceby wiedzie\u0107 kto jest np. autorem wiadomo\u015bci. Czy lepiej by\u0142oby wydzieli\u0107 tablic\u0119 w bazie dla token\u00f3w, przechowywa\u0107 tam userID oraz czas wa\u017cno\u015bci tokena, i czy\u015bci\u0107 je co jaki\u015b czas? Dzi\u0119ki temu nie musia\u0142bym przekazywa\u0107 userID obok tokena w np. wysy\u0142aniu czy pobieraniu wiadomo\u015bci\n* Rozdzielenie Check od Read jest celowe, jest to l\u017cejsza operacja, kt\u00f3ra b\u0119dzie wykonywana co kilka sekund, dlatego rozdzieli\u0142em sam fakt zmiany od pobierania nowych wiadomo\u015bci. Wiem, \u017ce tutaj websockety albo jaka\u015b inna magia by si\u0119 pewnie sprawdzi\u0142a, ale szkoda zachodu chyba\n* Czyta\u0142em, \u017ce api musi by\u0107 stateless itd, dlatego te CreateToken i ReleaseToken zamiast logowania i wylogowania, ale to takie chyba obchodzenie tematu, nie bardzo wiem co my\u015ble\u0107\n* w kilku tutorialach widzia\u0142em, \u017ce ludzie w php obs\u0142uguj\u0105 takie dane wewn\u0105trz request\u00f3w obiektowo- ma to sens, nie zabija to wydajno\u015bci, jak to tylko request na chwilk\u0119?\n* w kilku tutorialach widzia\u0142em, \u017ce ludzie maj\u0105 jeden plik dost\u0119pu do api, i w zale\u017cno\u015bci od metody (get, post, delete)robi\u0105 du\u017cego ifa\/switcha i co\u015b tam dzia\u0142aj\u0105. Czy to jest lepsze ni\u017c to co robi\u0119? Szczerze bardziej podoba mi si\u0119 takie rozwalenie tego na kilka mniejszych plik\u00f3w i endpoint\u00f3w.\n* dane do po\u0142\u0105czenia do bazy - nazwa, login, has\u0142o - zostawi\u0107 w tym pliczku jednym czy jeszcze jako\u015b gdzie\u015b wyci\u0105gn\u0105\u0107 poza?\n\nGeneralnie napisa\u0142em tego posta, poniewa\u017c chcia\u0142bym przy okazji projektu czego\u015b si\u0119 podszkoli\u0107 z tej dziedziny. Nie b\u0119dzie to api u\u017cywane do ratowania \u017cycia czy obrony narodowej. Je\u015bli jest co\u015b, co mog\u0119 dorobi\u0107 w dzie\u0144 dwa, a b\u0119dzie fajnym rozwi\u0105zaniem, to ch\u0119tnie przygarn\u0119 pomys\u0142y\/linki\/uwagi.","edit_count":0,"is_voted":null,"is_accepted":null,"is_subscribed":null,"user_id":101388,"deleter_name":null,"delete_reason":null,"orderingScore":0,"created_at":"2020-11-06T13:59:06+01:00","updated_at":"2020-11-06T13:59:06+01:00","deleted_at":null,"user":{"id":101388,"name":"Boski","is_online":false,"allow_sig":1,"allow_count":1,"allow_smilies":0,"posts":144,"visited_at":"2026-04-04T18:20:36.000000Z","created_at":"2019-06-17T10:10:53.000000Z","initials":"BO","is_verified":false,"is_deleted":false,"is_incognito":false,"is_blocked":false,"is_blocked_perm":false,"deleted_at":null,"photo":"\/uploads\/photo\/5d\/5d0ea5ae0c8b8.png"},"html":"<p>Hej! Zazwyczaj pisz\u0119 programy i czasem korzystam z jakiego\u015b API, tym razem jednak musz\u0119 stworzy\u0107 zar\u00f3wno API jak i program. Nie jest to dla mnie ca\u0142kiem obcy temat, ale chcia\u0142bym zrobi\u0107 to lepiej ni\u017c zwykle (a zwykle robi\u0142em amatorke, zwracanie liczb rozdzielonych \u015brednikami itd.). Zaczynam od prostego 'chatu' z logowaniem i rejestracj\u0105, uzna\u0142em, \u017ce taki chat jest prosty ale jednocze\u015bnie b\u0119dzie dobra podstawa \u017ceby co\u015b ju\u017c popracowa\u0107.<\/p>\n<p><strong>Endpointy w API:<\/strong><\/p>\n<ul>\n<li>User\/Create - przyjmuje login i has\u0142o,  dodaje do bazy nowego u\u017cytkownika, zwraca kod b\u0142\u0119du\/powodzenia<\/li>\n<li>User\/CreateToken - przyjmuje login i has\u0142o, zwraca token<\/li>\n<li>User\/ReleaseToken - 'wylogowanie', wyczyszczenie pola z tokenem<\/li>\n<li>Chat\/Check - zwraca najwi\u0119kszy messageID<\/li>\n<li>Chat\/Read - zwraca wiadomo\u015bci z messageID &gt; przeslaneMessageID<\/li>\n<li>Chat\/Send - dodaje do bazy wiadomo\u015b\u0107*<br \/>\nz tych plik\u00f3w odnosz\u0119 si\u0119 do innego - database - gdzie mam realizowane po\u0142\u0105czenie i wklepane dane<\/li>\n<\/ul>\n<p><strong>Tabele w bazie:<\/strong><\/p>\n<ul>\n<li>users - userID, login, pass, token<\/li>\n<li>messages - messageID, senderID, message<\/li>\n<\/ul>\n<p><strong>Uwagi:<\/strong><\/p>\n<ul>\n<li>Request przyjmuje dane w formie jsona<\/li>\n<li>Request zwraca dane w formie jsona<\/li>\n<li>Has\u0142o odkodowuj\u0119 poprzez base64_encode - dzi\u0119ki czemu w reque\u015bcie nie przesy\u0142am \u017cywcem has\u0142a tekstem - wiem, \u017ce to \u017cadne zabezpieczenie, no ale zawsze lepiej to wygl\u0105da chyba<\/li>\n<li>Token generowany jest poprzez proste md5(uniqid())<\/li>\n<li>Mam \u0142adne adresy przez RewriteRule w htaccess<\/li>\n<li>Przed klepaniem apki testowa\u0142em endpointy Postmanem<\/li>\n<li>Celowo nie korzystam z oauth<\/li>\n<li>Celowo nie korzystam z framework\u00f3w<\/li>\n<\/ul>\n<p><strong>Pytania:<\/strong><\/p>\n<ul>\n<li>Czasem obok tokena wysy\u0142am w reque\u015bcie userID, \u017ceby wiedzie\u0107 kto jest np. autorem wiadomo\u015bci. Czy lepiej by\u0142oby wydzieli\u0107 tablic\u0119 w bazie dla token\u00f3w, przechowywa\u0107 tam userID oraz czas wa\u017cno\u015bci tokena, i czy\u015bci\u0107 je co jaki\u015b czas? Dzi\u0119ki temu nie musia\u0142bym przekazywa\u0107 userID obok tokena w np. wysy\u0142aniu czy pobieraniu wiadomo\u015bci<\/li>\n<li>Rozdzielenie Check od Read jest celowe, jest to l\u017cejsza operacja, kt\u00f3ra b\u0119dzie wykonywana co kilka sekund, dlatego rozdzieli\u0142em sam fakt zmiany od pobierania nowych wiadomo\u015bci. Wiem, \u017ce tutaj websockety albo jaka\u015b inna magia by si\u0119 pewnie sprawdzi\u0142a, ale szkoda zachodu chyba<\/li>\n<li>Czyta\u0142em, \u017ce api musi by\u0107 stateless itd, dlatego te CreateToken i ReleaseToken zamiast logowania i wylogowania, ale to takie chyba obchodzenie tematu, nie bardzo wiem co my\u015ble\u0107<\/li>\n<li>w kilku tutorialach widzia\u0142em, \u017ce ludzie w php obs\u0142uguj\u0105 takie dane wewn\u0105trz request\u00f3w obiektowo- ma to sens, nie zabija to wydajno\u015bci, jak to tylko request na chwilk\u0119?<\/li>\n<li>w kilku tutorialach widzia\u0142em, \u017ce ludzie maj\u0105 jeden plik dost\u0119pu do api, i w zale\u017cno\u015bci od metody (get, post, delete)robi\u0105 du\u017cego ifa\/switcha i co\u015b tam dzia\u0142aj\u0105. Czy to jest lepsze ni\u017c to co robi\u0119? Szczerze bardziej podoba mi si\u0119 takie rozwalenie tego na kilka mniejszych plik\u00f3w i endpoint\u00f3w.<\/li>\n<li>dane do po\u0142\u0105czenia do bazy - nazwa, login, has\u0142o - zostawi\u0107 w tym pliczku jednym czy jeszcze jako\u015b gdzie\u015b wyci\u0105gn\u0105\u0107 poza?<\/li>\n<\/ul>\n<p>Generalnie napisa\u0142em tego posta, poniewa\u017c chcia\u0142bym przy okazji projektu czego\u015b si\u0119 podszkoli\u0107 z tej dziedziny. Nie b\u0119dzie to api u\u017cywane do ratowania \u017cycia czy obrony narodowej. Je\u015bli jest co\u015b, co mog\u0119 dorobi\u0107 w dzie\u0144 dwa, a b\u0119dzie fajnym rozwi\u0105zaniem, to ch\u0119tnie przygarn\u0119 pomys\u0142y\/linki\/uwagi.<\/p>\n","url":"http:\/\/static.175.128.202.116.clients.your-server.de\/Forum\/PHP\/345784-proste_api_dla_apki?p=1721628#id1721628","is_locked":false,"permissions":{"write":false,"delete":false,"update":false,"accept":false},"moderatorPermissions":{"delete":false,"update":false,"accept":false,"merge":false,"sticky":false,"admAccess":false},"comments":[],"comments_count":0,"assets":[],"metadata":"eyJpdiI6ImtRQndqaURMRWh4V3Rvb2xEdXhOb3c9PSIsInZhbHVlIjoiVDgyT0JncE5CV0dZOStKUXBEdWVzQWRjL0pqWXcrSDFqeGJ2UjF6YzF6MjYvb0I3SUdkYUtiS1pJdDFRTmlKUHJOWVo4Yk1VRC9FbnUrM0M0RGgwRjA5TG5hSVJxT3JpWTdhdnBPelpoSFZORTVHNFR6Vk9CM3dSL09xYU5DblQiLCJtYWMiOiI0ODY1ODMxNjg2NzA0ZGQ4MDg1ZDAyNzgzZDY5Njc0MmRhMzVkZDg0OWFkNWVlZWM0ZDQ1NGIyMDdmOGQ2NWJhIiwidGFnIjoiIn0=","has_review":false,"review_style":"info","parentPostId":null,"childrenFolded":false,"type":"regular","highlighted":false}