API Schnittstelle

Begonnen von Mezzo, 22 Dezember 2021, 11:28:15

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Mezzo

Hallo

gibt es schon für PragmaMX eine API schnittstelle?

Wo ich mit C# eine desktop anwendung machen kann und mit der API Schnittstelle auf die Datenbank von PragmaMX zugreifen kann und Daten Auszulesen und Reinzuschreiben.

Gruß

Mezzo

Olaf

Gibt es bisher nicht. Es gab dafür auch bisher keinen Bedarf. Was sollte die API denn können?
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Mezzo

Eigentlich nur die Datenbank auslegen können und in der Datenbank Speichern können.
Und Dateien wie z.b. PDF hochladen und Downloaden können.
ah bevor ich vergesse E-Mail an den Benutzer senden.
und noch das man sich von Desktop aus gleich eingelogt ist.

Das wäre schon ausreichen. Weil in PragmaMX wird ja alles in der DB gespeichert.

So könnte man die Benutzer Verwalten. Downloadbereich verwalten. News erstellen uvm.

Gruß

Mezzo

Olaf

ich stehe da wohl ein bisschen auf dem Schlauch..... mir erschließt sich gerade der Sinn nicht....

du willst eine Desktop-Anwendung schreiben, für welche du Zugang zur DB von pragmaMx benötigst. d.h. du bist mit deinem Rechner online, wenn die Anwendung läuft. Du willst also ein Programm schreiben, was Dinge erledigt, welche die Oberfläche pragma eh schon kann.....

oder verstehe ich da was falsch......
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Mezzo

Also die Idee ist diese.

Ich möchte eine Desktop Anwenden für Kunden die eine Maschine haben. Da die Firmen auf der Maschine das Internet Port 80 und 443 gesperrt sind. So das die Arbeiter nicht währen der Arbeitzeit in Internet sind und auch nicht gut für die Maschinen sind.

Will ich diese über eine Desktop anwendung machen.

Die Inhalte für sind.

Downloadbereich für Kunden
News für Kunden
FAQ für Kunden
Handbücher für Kunden
Ticket System für Kunden
Service Terminkalenter für Kunden
Chat System für Kunden

Gruß

Mezzo

Olaf

ok, verstanden jetzt....
hab ich aber auch grad keine Lösung für.....
g

Olaf

Kein Support über PN, Mail etc.!
Bitte die Fragen im Forum stellen, nur so helfen die Antworten auch den anderen Usern.
Bitte auch die Boardsuche nicht vergessen, oft ist genau dein Problem schon an anderer Stelle gelöst worden!

Mezzo

okay

dann muss ich das über MySQL Server machen und mit FTP verbindung

Danke für die Antwort

Gruß

Mezzo

Mezzo

#7
Okay das wäre keine gute Idee besser wäre das wir eine API Schnittstelle machen.

Olaf würdes du mir dabei helfen? das wir schneller damit fertig werden?

Ich würde vorschlagen das wir ein Datei mit dem Namen "PMX_API_Server.php" machen.


<?php

// Load Request
$api_method = isset($_POST['api_method']) ? $_POST['api_method'] : '';
$api_data = isset($_POST['api_data']) ? $_POST['api_data'] : '';

// Validate Request
if (empty($api_method) || empty($api_data)) {
    
API_Response(true'Invalid Request');
}
if (!
function_exists($api_method)) {
    
API_Response(true'API Method Not Implemented');
}

// Call API Method
call_user_func($api_method$api_data);

/* Helper Function */

function API_Response($isError$errorMessage$responseData '')
{
    exit(
json_encode(array(
        
'IsError' => $isError,
        
'ErrorMessage' => $errorMessage,
        
'ResponseData' => $responseData
    
)));
}

/* API Methods */

function loginUser($api_data)
{
    
// Decode Login Data
    
$login_data json_decode($api_data);

    
// Dummy Check
    
if ($login_data->username == 'test' &&
        
$login_data->password == '1234')
    {
        
// Success
        
API_Response(false'''SUCCESS');
    }
    else
    {
        
// Error
        
API_Response(true'Invalid username and/or password.');
    }
}

?>



und in C# könnte es dann so aussehen


using System;
using System.Text;
using System.Net;
using System.Collections.Specialized;
using Newtonsoft.Json;

namespace TemplateFive
{
    public class API_Response
    {
        public bool IsError { get; set; }
        public string ErrorMessage { get; set; }
        public string ResponseData { get; set; }
    }

    public class Login_Request
    {
        public string username { get; set; }
        public string password { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // request params
            string apiUrl = "https://mysite.com/PMX_api_server.php";
            string apiMethod = "loginUser";
            Login_Request myLogin_Request = new Login_Request()
            {
                username = "test",
                password = "1234"
            };

            // make http post request
            string response = Http.Post(apiUrl, new NameValueCollection()
            {
                { "api_method", apiMethod                                    },
                { "api_data",   JsonConvert.SerializeObject(myLogin_Request) }
            });

            // decode json string to dto object
            API_Response r =
                JsonConvert.DeserializeObject<API_Response>(response);

            // check response
            if (!r.IsError && r.ResponseData == "SUCCESS")
            {
                Console.WriteLine("login success");
            }
            else
            {
                Console.WriteLine("login error, reason is: {0}",
                    r.ErrorMessage);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }

    public static class Http
    {
        public static String Post(string uri, NameValueCollection pairs)
        {
            byte[] response = null;
            using (WebClient client = new WebClient())
            {
                response = client.UploadValues(uri, pairs);
            }
            return Encoding.Default.GetString(response);
        }
    }
}