# Custom REST API Endpoint Öffentlich machen

**URL:** <https://forum.shopware.com/t/custom-rest-api-endpoint-offentlich-machen/45472>\
**Category:** Programmierung\
**Created:** [28. April 2017 um 05:10 UTC](https://forum.shopware.com/t/custom-rest-api-endpoint-offentlich-machen/45472 "2017-04-28T05:10:54Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rocks360](https://avatars.discourse-cdn.com/v4/letter/r/f1d935/32.png) [@Rocks360](https://forum.shopware.com/u/Rocks360)\
**Post date:** [28. April 2017 um 05:10 UTC](https://forum.shopware.com/t/custom-rest-api-endpoint-offentlich-machen/45472/1 "2017-04-28T05:10:54Z")

</div>

Hallo,

gibt es die Möglichkeit den selbst erstellten API Endpoint öffentlich zu machen? Also das keine Authentifizurung von nöten ist bei einem POST Request?&nbsp;

---

<div class="post-metadata">

**Author:** ![ClemensPeters](https://avatars.discourse-cdn.com/v4/letter/c/67e7ee/32.png) [@ClemensPeters](https://forum.shopware.com/u/ClemensPeters)\
**Post date:** [16. November 2017 um 09:43 UTC](https://forum.shopware.com/t/custom-rest-api-endpoint-offentlich-machen/45472/2 "2017-11-16T09:43:15Z")

</div>

würde ich auch gerne wissen.

Und ich habe eine weitere Frage:

ich habe einen custom enpoint unter [my-shop.de/api/order/](http://my-shop.de/api/order/).

Wie bekomme ich den auf&nbsp;[my-shop.de/api/one/two/order/](http://my-shop.de/api/one/two/order/) ?

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [16. November 2017 um 10:07 UTC](https://forum.shopware.com/t/custom-rest-api-endpoint-offentlich-machen/45472/3 "2017-11-16T10:07:23Z")

</div>

> [@Rocks360 schrieb:](https://forum.shopware.com/profile/25353/Rocks360 "Rocks360")
> 
> Hallo,
> 
> gibt es die Möglichkeit den selbst erstellten API Endpoint öffentlich zu machen? Also das keine Authentifizurung von nöten ist bei einem POST Request?&nbsp;

Klar. Du kannst dir ein Plugin schreiben, dass die Authentifizierung an entsprechender Stelle unterbindet.

> &nbsp;ich habe einen custom enpoint unter [my-shop.de/api/order/](http://my-shop.de/api/order/).

Was ist daran custom?

> Wie bekomme ich den auf&nbsp;my-shop.de/api/one/two/order/ ?

Du müsstest wohl den Router umschreiben.

Edit:

Vielleicht klappt es auch über einen Eintrag in der s\_rewrite\_urls

---

<div class="post-metadata">

**Author:** ![MrMDeluxe](https://avatars.discourse-cdn.com/v4/letter/m/4da419/32.png) [@MrMDeluxe](https://forum.shopware.com/u/MrMDeluxe)\
**Post date:** [10. Dezember 2017 um 07:11 UTC](https://forum.shopware.com/t/custom-rest-api-endpoint-offentlich-machen/45472/4 "2017-12-10T07:11:14Z")

</div>

Hallo,

die Authentifizierung kann doch recht einfach deaktiviert werden.

@Rocks360: Aber bist Du Dir sicher, dass einfach jeder ohne Authentifizierung bei Dir Daten hinzufügen können soll und Du weisst was Du tust?!

Also API Abfragen via GET Method öffentlich zugänglich machen kann ich ja noch nachvollziehen…

Um die Digest Auth Authentifizierung für bestimmte API Controller/Methods zu unterbinden, schreib ein Plugin und subscribe Dich auf folgendes Event:

$this-\>subscribeEvent(  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ‘Enlight\_Controller\_Front\_DispatchLoopStartup’,  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ‘onStartDispatch’  
&nbsp; &nbsp; &nbsp; &nbsp; );

Hier dann der zugehörige Event Handler für z.B. den API Articles Controller bzgl. GET Requests:

public function onStartDispatch(\Enlight\_Event\_EventArgs $args)  
{

&nbsp; &nbsp; if ($args-\>getSubject()-\>Request()-\>getModuleName() == “api” &&  
&nbsp; &nbsp; &nbsp; &nbsp; $args-\>getSubject()-\>Request()-\>getControllerName() == “articles” &&  
&nbsp; &nbsp; &nbsp; &nbsp; $args-\>getSubject()-\>Request()-\>getMethodName() == “GET”) {

&nbsp; &nbsp; &nbsp; &nbsp; $initAuth = Shopware()-\>Events()-\>getListeners(‘Enlight\_Bootstrap\_InitResource\_Auth’);  
&nbsp; &nbsp; &nbsp; &nbsp; $frontPreDispatch = Shopware()-\>Events()-\>getListeners(‘Enlight\_Controller\_Front\_PreDispatch’);  
&nbsp; &nbsp; &nbsp; &nbsp; $listeners = array\_merge($initAuth, $frontPreDispatch);  
&nbsp; &nbsp; &nbsp; &nbsp; foreach ($listeners as $listener) {  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($listener instanceof \Enlight\_Event\_Handler\_Plugin) {  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($listener-\>Plugin()-\>getName() == “RestApi”) Shopware()-\>Events()-\>removeListener($listener);  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }

&nbsp; &nbsp; &nbsp; &nbsp; }

&nbsp; &nbsp; &nbsp; &nbsp; $rawBody = $args-\>getSubject()-\>Request()-\>getRawBody();

&nbsp; &nbsp; &nbsp; &nbsp; try {  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ($rawBody != ‘’) {  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $input = Zend\_Json::decode($rawBody);  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $input = null;  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }  
&nbsp; &nbsp; &nbsp; &nbsp; } catch (Zend\_Json\_Exception $e) {  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $args-\>getSubject()-\>Response()-\>setHttpResponseCode(400);  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $args-\>getSubject()-\>Request()-\>setControllerName(‘error’);  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $args-\>getSubject()-\>Request()-\>setActionName(‘invalid’);

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;  
&nbsp; &nbsp; &nbsp; &nbsp; }

&nbsp; &nbsp; &nbsp; &nbsp; if ($input !== null) {  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $args-\>getSubject()-\>Request()-\>replacePost($input);  
&nbsp; &nbsp; &nbsp; &nbsp; }

&nbsp; &nbsp; }

}

---

<div class="post-metadata">

**Author:** ![Rocks360](https://avatars.discourse-cdn.com/v4/letter/r/f1d935/32.png) [@Rocks360](https://forum.shopware.com/u/Rocks360)\
**Post date:** [30. Januar 2018 um 21:57 UTC](https://forum.shopware.com/t/custom-rest-api-endpoint-offentlich-machen/45472/5 "2018-01-30T21:57:17Z")

</div>

Hey, danke für deine Antwort. Ja icc weiß was ich tuhe 😃 ;). Der hintergrund war, dass wir mehrere Newsletter Subscribe Formulare auf verschieden Webseiten haben und wir gerne das Newsletter System von Shopware nutzen wollten. Ich habe jedoch ein java microservice geschrieben der die Requests von den Seiten annimmt und dann mit basic auth an shopware weiterleitet. War schneller zu Implementien. Die erste Idee war, alles per js dierekt zu einer&nbsp;Öffentlichen API zu schicken. Nun mahcen die Webseiten das ganze zuerst an die ensprechende Website gesendet und dort geprüft und dann über z.B. php per Restcall an den Microservice gesendet. Was dann dementsprechend auch noch etwas Sicherer ist. Wobei der microservice jeglichen Input ebenfalls noch einmal Valiediert…
