Permalänk
Medlem

Skapa en Webservice?

Hej! Har gått i tankarna om att skapa en app till Android och IOS, som dock kräver någon form av Webservice där man kan hämta/spara data i en databas.
Är väl en van programmerare och skriver mest i C#, C++ och Python men jag har aldrig skapat någon form av webservice, bara använt via diverse API:er.

Vad ska jag börja med? Vilka typer av webservices finns det och vilken metod är 'bäst' för mina ändamål där servern mest kommer behandla data?
Dela med er av era erfarenheter och tips!

Tack

Visa signatur

Corsair 750D | i5 4670k | ASUS Z87-a | 8GB Corsair Dominator | Asus GTX770-DC2OC | Samsung 840 EVO 250GB | WD 500GB X2

Permalänk
Medlem

Om du är van med c# och dotnet rekommenderar jag ASP.NET web api 2: http://www.asp.net/web-api

Permalänk
Medlem

Web API som Hubbee nämner är jäkligt smidigt att jobba med. Ett annat alternativ för C# och ASP.NET är ASMX och WCF. WCF är modernare än ASMX, men ASMX är lättare att skriva.

Visa signatur

Fractal Design Define R5 | MSI Z97-GD65 Gaming | MSI Geforce GTX 970 Gaming 4G | Intel i5 4690k | Cooler Master Hyper 212 EVO | EVGA Supernova G2 750W | 2x8GB Corsair Vengeance Low Profile DDR3 1600Mhz | Samsung 850 EVO | Seagate 1TB SATA3.5

Permalänk
Hedersmedlem

Om du gillade Pythonspåret så finns det en del alternativ. Dels kan man använda `cgi`-modulen direkt, vilket är väldigt snabbt att komma igång med och ligger rätt nära "metallen" (så det hjälper om man har lite koll på HTTP i allmänhet), men detta är inte egentligen längre rekommenderat. Det skalar dåligt under last, har få (nästan "inga") hjälpmedel tillgängliga (smidighetsfunktioner, vettig felrapportering (`cgitb` kan dock hjälpa till med detta), med mera) och bör nog egentligen bara användas om man inte har några andra val. CGI bör stödas av mer eller mindre alla webbservrar, och det går att skriva applikationer på bara ett fåtal rader. Pythons wiki har lite mer info och vidare länkar om `cgi`.

Med fördel använder man i Pythonsammanhang idag i stället något ramverk som implementerar WSGI. Det finns sådana ramverk för olika projektstorlekar. Kanske något lättviktigt som Flask (ska du bara bygga backend kanske delmängden Werkzeug räcker på egen hand — faktum är att detta verkar mest passande i mina ögon) eller Tornado kan passa. Ska man bygga något gigantiskt så kanske det kan vara värt att gå på och lära sig Django (används av exempelvis Bitbucket, Instagram, Pinterest), men det är ett minst sagt stort projekt och känns inte relevant här. Man kan även nämna Pyramid (tidigare "Pylon", numera en del av "Pylons Project"; används av exempelvis Dropbox, Reddit, Digg).

För den delen, hur hemskt det än må anses vara i vissa aspekter, så är det svårt att slå PHP i enkelhet vad gäller att sätta upp små tjänster, och stöd för plattformen finns överallt. Lägger man extra manke till för att strukturera saker och inte gå i "fällan" med att strössla PHP-logik mitt i presentationen (utöver enkla templatekonstruktioner) så går det att hålla rätt överblickbart. Din service behöver troligen bli märkbart stor för att prestanda ska bli ett problem, och skulle det bli fallet så ska det mycket till för att PHP med något liknande Varnish framför sig (och/eller memcached vid databasintensiva applikationer) inte ska orka med. Det finns trots allt ett par anledningar till att PHP är så vida använt; dessa inkluderar att det går snabbt att få något som mer eller mindre fungerar och att det med viss möda (fast troligen inte mer än med alternativa tillvägagångssätt) även går att skriva saker som kan skala.

Kan flika in med att säga att det troligen ska rätt mycket till för att ren serverprestanda ska bli ett problem, om jag tolkar den skala det handlar om rätt. Nätverksfördröjningar och annat brukar kunna överskugga det mesta av tiden, och att börja bygga Fort Knox i alla led från stund 1 kan ses som förhastad optimering. Att få upp något som fungerar för att sedan kunna utföra prestandatester för att isolera och rätta till flaskhalsar, eller i sämsta fall behöva riva ner och bygga upp igen men då med kunskap om var problemområdena ligger, är nog den mest effektiva vägen framåt. Minns också att saker som Varnish som nämndes kort ovan rätt konfigurerat på egen hand i många situationer kan öka antalet simultana klienter som kan behandlas med ett par storleksordningar. Att då jaga millisekunder i backend i ett tidigt skede är troligen mindre väl spenderad tid, så se bara till att få upp något som fungerar (säkerhet är dock alltid bra att ha tagit med i beräkningen från början).

Node.js är något annat som ofta nämns som "hett" numera, men det verkar ha lite mer än bara nyhetens behag bakom sig och används av en del riktigt stora spelare. Jag tror att det kan vara intressant att utforska, om inte annat bara för att få en inblick i själva teknologin, men jag har ännu inte använt det själv.

——
Tillägg: When to use Tornado, when to use Twisted / Cyclone / GEvent / other [closed] [SO] — hittade denna snabbgenomgång av Pythonramverk för webbapplikationer som kan vara intressant läsning om man vill använda Python.

Tillägg av SO-länk.
Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av reflect:

Hej! Har gått i tankarna om att skapa en app till Android och IOS, som dock kräver någon form av Webservice där man kan hämta/spara data i en databas.
Är väl en van programmerare och skriver mest i C#, C++ och Python men jag har aldrig skapat någon form av webservice, bara använt via diverse API:er.

Vad ska jag börja med? Vilka typer av webservices finns det och vilken metod är 'bäst' för mina ändamål där servern mest kommer behandla data?
Dela med er av era erfarenheter och tips!

Tack

Kolla upp .net wcf och skapa en wcf tjänst. Simpelt och bra. Lite pill med .config ibland men det är bara att lära sig, wcf kunskaper efterfrågas i branschen. Man får mycket möjligheter på ett enkelt sätt med wcf. Om du inte får till det, det är ju bra att försöka själv, så kan du lägga upp projektet på dropbox eller något eller så kan jag skapa ett åt dig men det är bra om du försöker själv och läser på, jag tror du fixar det.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!