PHP инсталация на "приложения"

Ticketa

Registered
Привет,
на какъв принцип работят системите с опция за "пазар" и "производство" на приложения.
Визирам това: https://apps.shopify.com/

Тоест разработчика спазва даден стандарт, който е наложен от Х платформата. Разработчика изпраща приложението към Х платформата, тя го "преглежда" и евентуално след "одобрение" го добавя в своя App Store - така ли е или съм в грешка?

Ако е така по какъв начин се създава този "стандарт" - нещо подобно на API ли е?

И евентуално как работи самото инсталиране към Х сайт? Всеки сайт при инсталиране на Х приложение (разархивиране? на файлове + създаване на таблици ?) и чрез тяхното "премахване" пък се изтриват?

Хаотични въпроси, но ми е интересно как работи един подобен Апп маркет. Искам да пусна платформа в CodeCanyon на CMS принцип и с времето да предложа купуване на Addons към нея, но с опция самият клиент като го закупи да може "да го инсталира" по максимално прост и удачен начин и евнтуално други разработчици да добавят приложения към въпросния маркет - след мое одобрение или автоматизирано одобрение да бъдат добавени в маркета. Така ще печели разработчика и аз някакъв 2% например.

Насочил съм се към PHP 7.4+ + MVC - без конкретен Framework
 
Платформата е изградена по начин, по който може да се разширява. Ти трябва да си съставиш твоя архитектура. Според домейна на апликацията създаваш серия от APIs, чрез които казваш на разработчиците какво могат и какво не могат да правят/достъпят.

Според как си изградиш инфраструктурата на приложението, решаваш как искаш тези APIs да се достъпват. Shopify например са избрали REST и GraphQL начин, но ти можеш да го базираш на интерфейси (например).

Вече ти решаваш какво може и какво не. Вземи за пример Wordpress.

Имай предвид, че това не е нещо, което може да се опише във форума. Такива неща са базирани на серия от познания в различни сфери.

Инсталирането навсякъде е различно. Едно време да инсталираш тема в phpbb форум беше (може би още е) да разархивираш папка в определена папка оказана от phpbb.
Ако искаш автоматизация, трябва да се съобразиш с твоята имплементация. Трябва да знаеш какво трябва инсталацията да покрива. Това било създаване на таблици в базата данни, регистриране на конфигурация, регистриране на инициализатора на модула/плъгина. Просто твоята система трябва да знае как да инициализира този модул. Съответно разработчика трябва да е наясно, че трябва да предостави нужните неща, за да може твоя инсталатор да сработи. Това означава, че трябва да си създадеш стандарт и за това.

Най-сложната част е да държиш ядрото агностично. Ядрото не трябва да знае модула/плъгина какво прави. Само трябва да знае, че модула/плъгина се съобразява с твоя API.

Просто разгледай документацията на различни платформи да придобиеш представа.
Можеш да стартираш от тук: https://shopify.dev/docs/app-extensions

Запознай се добре с Modular Programming, Modularity, Extensibility, SOLID Principles, някои Design Patterns.
Най-добре е да си илюстрираш архитектурата, за да имаш видима основна цел, която да гониш при разработката.



Автоматизирано одобрение става трудно. Това в контекста на security. Едва ли искаш да допуснеш някой да си инжектира разни експлойти, или пък да ти предостави миграция, в която има DROP DATABASE.

Microsoft например правят одобрението ръчно (или поне до някаква степен, те може и да си имат вътрешни тулове за целта) за адд-ини за Outlook, Word и т.н. и са много стриктни откъм изисквания. Не можеш просто така да си публикуваш адд-ина в техния app store.
 
Дали това нещо е правилен подход?
https://github.com/FriendsOfREDAXO/icecoder/blob/master/vendor/icecoder/lib/plugins-manager.php

@Revelation, Shopify не са ли ruby on rails ?
@uphero, усещам, че има някакъв майтап, който не разбирам :D :clap:
 
Ти какво очакваше? :D Няма правилен/неправилен или само един начин, по който нещата да се направят. Без опит пак можеш, но ти гарантирам, че на всеки нов аддон ще пипаш ядрото, за да се нагодиш ти по аддона, вместо аддона да се нагажда по теб.

Изгради си ясно нещата и действай.

Можеш да вземеш за пример този отворен проект, който е писан на Laravel(back-end) и Mithril (front-end). Целия форум се гради на едно малко ядро и всичко останало са extensions. Въпроса е, че при тях се добавят чрез composer. Нямат (поне мисля че за сега) автоматичен инсталатор.

https://docs.flarum.org/extend/
 
Ticketa каза:
Дали това нещо е правилен подход?
https://github.com/FriendsOfREDAXO/icecoder/blob/master/vendor/icecoder/lib/plugins-manager.php

@Revelation, Shopify не са ли ruby on rails ?
@uphero, усещам, че има някакъв майтап, който не разбирам :D :clap:

Това е просто мениджър. Инсталира, премахва и ъпдейтва плъгини.
Както виждаш целта му е просто да разархивира плъгина в определена папка. Оттам ядрото на системата знае как да инициализира нещата, които са в тази папка.

Ти също можеш да си направиш нещата така, но това е само една игла от цялата имплементация.


Нямам идея Shopify на какво са, но това няма нищо общо. Езика/работната рамка е от без значение.
 
https://docs.flarum.org/extend/ - интересно нещо

Дали се сещаш за нещо друго подобно, което е с отворен код?
 
https://docs.flarum.org/extend/ - интересно нещо

Дали се сещаш за нещо друго подобно, което е с отворен код?

Лично аз си го представям, че самото "ядро" е MVC модел. В този модел има няколко "основни"/ядро класа , като един от тези класа отговаря за extensions-а, тоест той определя правилата на самите extensions.

Примерно самия клас си го представям:
- проверява налични езици или поне за един главен default език (мулти езичност)
- проверява за налични css, js и ако има ги добавя към View частта
- проверява дали самият extension има добавени tpl файлове (ако ще се ползва template system)
- проверява дали модула ползва база данни, ако ползва база данни проверява дали самия модул има създадени таблици (по дефаулт резултата ест. е че няма), създава нужните таблици, ако ги няма. Ако се нагала "добавя" колони в други "основни" таблици (въпреки, че май не е особено нужно?)
- класа проверява този excensions след като е инсталиран дали е включен или изключен с опция "изтриване"


Един вид auto loader, но със стриктни стандарти?

Не съм сигурен дали ясно и разбирамо го обясих :?


П.С. Ако логиката ми е грешка, моля дайте различно предложение?
 
//offtopic
Хубаво е едит бутона да не изчезва след Х време във форума


Това също не ми се струва лош вариант: subrion.org ?
 

Горе