PHP bir API için en iyi uygulamalar: fonksiyonlar, sınıflar ya?

4 Cevap php

Benim şirket olarak bazı uygulamalar geliştirdiler. Biz diğerleri (bir verilerini) kullanabilirsiniz, böylece, tek bir uygulama (örneğin uygulama A) için bir API oluşturmak zorunda.

The question is : we already have developped PHP classes for the model of Application A, if we want to create an API, should we :
- re-use these classes (too much functionnalities for an API, too heavy...)
- create one PHP class, with some basic functions, that takes in input and returns only raw values (like strings, array... NOT complex classes)
- create another set of PHP classes, simpler, and designed only to be used by an external application (so only to get data easily)

Usually, an API is the 2nd solution (to be used as well with PHP than as a web service for example), but i find it too bad that we made a complex and usefull class modelisation, then we tear it apart just to have functions, strings and array. The 3rd one seems to me to be the compromise, but a collegue of mine insist that this is not an API. Too bad...

Sen ne düşünüyorsun?

4 Cevap

Çözüm 3 numaralı bakış bir mimari açıdan en iyi biri olabilir. Temelde sizin API basitleştirmek için Facade Design Pattern kullanıyorsunuz. Ben şu an onunla uğraşıyorum Süresi: Patterns Of Enterprise Application Architecture bu yaklaşım olarak açıklanan yılında service layer hangi ilgileneceğiz kim, yani herhangi bir kullanıcı (maruz istemiyorum çünkü tamamen mantıklı Lütfen API ile) gerçekten gerekli veya arzu edilir daha fazla karmaşıklığa.

Bu (onlar mantıklı eğer ham değerleri) kolay mümkün arayüzü ve transfer nesneleri kullanarak içerir. Kısa sürede Cephe (bir webcoder gibi) uzak hizmetleri ile çağrıldığını gibi sonunda repsonses kırmak zorunda kalacak ve yine ham değerleri (veri konteynerler) aşağı ister.

Kamu API basitleştirmek Cephe sınıfları bir dizi oluşturun.

Orijinal sınıflar üzerinde basit API uygulamak bazı ince sarma oluşturun. Ambalajında ​​herhangi bir iş mantığı reimplement YAPMAYIN - mantık değişiklikleri herhangi, mutlaka bir parça değiştirilmiş ve hangi kaybetmeyeceksiniz olacak gibi değildi, eğer sorun sizi neden olur. Basit, harici giriş / çıkışları tutun dize daha karmaşık bir şey gerekiyorsa, yapılandırılmış veri XML veya JSON, ama çok fazla karmaşıklığı önlemek için deneyin - Eğer iki sorgu parametreleri tek yapısının daha iyi olabilir geçmek 2 şey varsa 2. alanları ile.

İşte 'Cephe' desen bulunuyor.

I would also say have a look at the Facade pattern. Build a set of Facade classes that only offers the functionality that is really needed to be public. Those classes then for sure use your current core classes.

Bu çekirdek sınıfları değiştirirseniz, API mutlaka değiştirilmesini gerektiğini de size avantaj sağlar.