Προτυποποίηση με κωδικό Python πριν από τη σύνταξη




Έχω αρχίσει να σκέφτονται πάνω από τη σύνταξη ενός κορυφή τοποθέτηση βιβλιοθήκη για μια στιγμή. Ξέρω Python αρκετά καλά και το σχέδιο για την εφαρμογή πάντα σε Python για να αρχίσει με, αλλά προβλέπουν ότι μπορεί να χρειαστεί να ξανά εφαρμόσει κάποιες βασικές ρουτίνες σε ένα καταρτίζονται γλώσσα τελικά.


IIRC, ένα από τα πρωτότυπα αρμοδιοτήτων Python ήταν η γλώσσα πρωτοτύπων, ωστόσο Python είναι αρκετά φιλελεύθερη επιτρέποντας λειτουργίες, functors, τα αντικείμενα που πρέπει να περάσει σε λειτουργίες και μεθόδους, ενώ υποψιάζομαι το ίδιο δεν ισχύει και να πω C ή Fortran.


Τι πρέπει να ξέρετε για το σχεδιασμό λειτουργίες / τάξεις που οραματίζομαι θα πρέπει να διασυνδέονται στη καταρτίζονται γλώσσα; Και πόσα από αυτά τα πιθανά προβλήματα που αντιμετωπίζονται από τις βιβλιοθήκες, όπως cTypes, bgen, [SWIG](http://www.swig.org/) , [Boost.Python](http://www.boost.org/doc/libs/1_35_0/libs/python/doc/index.html) , [Cython](http://cython.org/) ή [Python SIP](http://www.riverbankcomputing.co.uk/software/sip/intro) ;


Για αυτή τη συγκεκριμένη περίπτωση χρήσης, (α εξάρτημα βιβλιοθήκη) φαντάζομαι επιτρέποντας στους χρήστες να ορίσουν μαθηματικές συναρτήσεις (Guassian, Lorentzian κλπ) ως συναρτήσεις Python οποίο μπορεί στη συνέχεια να περάσει ένα ερμηνεύεται από τη βιβλιοθήκη τοποθέτηση μεταγλωττισμένο κώδικα. Περνώντας και την επιστροφή συστοιχίες είναι επίσης απαραίτητη.
Τέλος, ένα θέμα που πραγματικά μπορώ να βάλω μια τιμή απάντηση :). 


Έχω διερευνηθεί f2py, boost.python, γουλιά, cython και πυρέξ για την εργασία μου (PhD στις τεχνικές οπτικής μέτρησης). Θα χρησιμοποιηθεί γουλιά εκτενώς, boost.python μερικές και πυρέξ και cython πολλά. Θα χρησιμοποιηθεί επίσης ctypes. Αυτή είναι η ανάλυση μου:


**Αποποίηση** : Αυτή είναι η προσωπική μου εμπειρία. Δεν εμπλέκομαι με οποιοδήποτε από αυτά τα έργα.


**swig:** 
δεν παίζει καλά με ++ γ. Θα πρέπει, αλλά το όνομα που κατασπαράζουν τα προβλήματα στο στάδιο της σύνδεσης ήταν ένας μεγάλος πονοκέφαλος για μένα σε Linux και Mac OS X. Εάν έχετε κωδικό C και θέλουν να διασυνδεθεί με python, είναι μια καλή λύση. Έχω τυλιγμένο τις GTS για τις ανάγκες μου και έπρεπε να γράψω ουσιαστικά ένα C κοινή βιβλιοθήκη που θα μπορούσα να συνδεθείτε. Εγώ δεν θα το συνιστούσα.


**Ctypes:** 
Έγραψα ένα περιτύλιγμα libdc1394 (IEEE βιβλιοθήκη κάμερα) με τη χρήση ctypes και ήταν μια πολύ straigtforward εμπειρία. Μπορείτε να βρείτε τον κωδικό στο <https://launchpad.net/pydc1394> . Είναι πολλή δουλειά για να μετατρέψει τις κεφαλίδες σε κώδικα python, αλλά στη συνέχεια όλα λειτουργούν αξιόπιστα. Αυτός είναι ένας καλός τρόπος, αν θέλετε να διασυνδέσει μια εξωτερική βιβλιοθήκη. Ctypes είναι επίσης στην stdlib του πύθωνα, έτσι ώστε ο καθένας μπορεί να χρησιμοποιήσει τον κωδικό σας αμέσως. Αυτό είναι επίσης ένας καλός τρόπος για να παίξει γύρω με ένα νέο lib σε python γρήγορα. Μπορώ να το συστήσω σε διασύνδεση με εξωτερικές libs.


**Boost.Python** : Πολύ ευχάριστη. Αν έχετε ήδη κωδικό C ++ της δικής σας που θέλετε να χρησιμοποιήσετε σε python, πάμε για αυτό. Είναι πολύ εύκολο να μεταφράσει τις δομές γ τάξη ++ σε δομές python τάξη με αυτόν τον τρόπο. Θα το συνιστούσα αν έχετε C ++ κώδικα που χρειάζεστε σε python.


**Πυρέξ / Cython:** Χρήση Cython, δεν πυρέξ. Περίοδος. Cython είναι πιο προηγμένη και πιο ευχάριστη στη χρήση. Σήμερα, κάνω τα πάντα με cython που συνήθιζα να κάνω με SWIG ή Ctypes. Επίσης, είναι ο καλύτερος τρόπος αν έχετε κωδικό Python που τρέχει πολύ αργά. Η διαδικασία είναι απολύτως φανταστική: να μετατρέψετε μονάδες python σας σε ενότητες cython, την κατασκευή τους και να διατηρήσουν προφίλ και τη βελτιστοποίηση, όπως ήταν ακόμα python (καμία αλλαγή των εργαλείων που απαιτούνται). Στη συνέχεια μπορείτε να εφαρμόσετε όσο (ή λίγο) τον κωδικό C αναμιγνύεται με κωδικό python σας. Αυτό είναι κατά πολύ πιο γρήγορα στη συνέχεια να ξαναγράψει ολόκληρα τμήματα της εφαρμογής σας σε C? θα ξαναγράψει μόνο το εσωτερικό βρόχο.


**Χρονισμός** : ctypes έχει το υψηλότερο εναέρια κλήση (~ 700ns), ακολουθούμενη από boost.python (322ns), τότε άμεσα από swig (290ns). Cython έχει το χαμηλότερο εναέρια κλήση (124ns) και την καλύτερη ανατροφοδότηση όπου ξοδεύει το χρόνο στην (υποστήριξη cProfile!). Οι αριθμοί είναι από το κουτί μου ζητά ένα ασήμαντο συνάρτηση που επιστρέφει έναν ακέραιο από ένα διαδραστικό κέλυφος? εναέρια μονάδα εισαγωγής ως εκ τούτου δεν χρονικά, λειτουργεί μόνο εναέρια κλήση. Συνεπώς, είναι πιο εύκολο και πιο παραγωγικό να πάρετε τον κωδικό python γρήγορα από προφίλ και τη χρήση cython.


**Περίληψη** : Για το πρόβλημά σας, χρησιμοποιήστε Cython?). Ελπίζω ότι αυτό υποβαθμισμένο θα είναι χρήσιμο για μερικούς ανθρώπους. Θα απαντήσω ευχαρίστως κάθε υπόλοιπο ερώτηση.







**Επεξεργασία** : ξεχάσω να αναφέρω: για αριθμητικούς λόγους (δηλαδή, σύνδεση με NumPy) χρησιμοποιούν Cython? έχουν υποστήριξη για αυτό (γιατί ουσιαστικά την ανάπτυξη cython για το σκοπό αυτό). Έτσι, αυτό θα πρέπει να είναι μια άλλη +1 για την απόφασή σας.
Αυτή είναι η γνώμη μου, αλλά? όπως ακριβώς και οι τάξεις περίπτωση δεν, θα ήθελα να εφαρμόσουν μια `copy`μέθοδο του είδους στην τάξη για να καταστεί δυνατή η τροποποίηση, διατηρώντας παράλληλα το αμετάβλητο, αλλά υπάρχει ορισμένες περιπτώσεις που δεν μπορώ να βοηθήσω να το μεταβλητό? Για παράδειγμα, όταν κάτι αναμένεται να γίνει η λειτουργία αντιγραφής είναι πολύ μεγάλη και αργή για την κατηγορία? όπως όταν η τάξη έχει τόσα πολλά συχνά τροποποιημένο μέλη. Και μην ανησυχείτε για χιλιάδες περιπτώσεις που επιπλέουν γύρω στη μνήμη, επειδή είναι αυτόματα GC'ed, οπότε το πιο πραγματικό πρόβλημα είναι ο χρόνος κόστος της αντιγραφής περιπτώσεις της κλάσης. Παρακαλώ πείτε μου εάν η γνώμη μου είναι κάπως λάθος :) **Για την «ορθογραφία λάθος» μέρος (Μήπως εννοείτε)**


* Θα μπορούσατε να κάνετε κάποια `LIKE`ερωτήματα στο db π.χ. `LIKE %j%e%a%n%s%`, αλλά αν θέλετε να το κάνετε καλά, θα πρέπει να χρησιμοποιήσετε μια βιβλιοθήκη αναζήτησης όπως αυτό:


	+ <https://github.com/TomLingham/Laravel-Searchy>
	+ <http://tnt.studio/blog/did-you-mean-functionality-with-laravel-scout>



> 
> Μπορείτε να δημοσιεύσετε το αρχείο ρυθμίσεων στον κατάλογο της εφαρμογής σας και να παρακάμψετε τις ρυθμίσεις, εκτελώντας php τεχνίτη πωλητή: δημοσιεύει για να αντιγράψετε τις ρυθμίσεις στο φάκελο config σας όπως searchy.php
> 
> 
> Μπορείτε να ορίσετε το προεπιλεγμένο πρόγραμμα οδήγησης που θα χρησιμοποιηθεί για τις αναζητήσεις στο αρχείο ρυθμίσεων. Οι επιλογές σας (στην παρούσα φάση) είναι: ασαφή, απλό και Levenshtein.
> 
> 
> Μπορείτε επίσης να παρακάμψετε αυτές τις μεθόδους, χρησιμοποιώντας την ακόλουθη σύνταξη κατά την εκτέλεση μιας αναζήτησης:
> 
> 
> 


Με τον καθορισμό [Levenshtein απόσταση](https://en.wikipedia.org/wiki/Levenshtein_distance) μπορείτε να finetune πόσο μακριά μια λέξη μπορεί να είναι.


* Αν χρειάζεστε καλύτερη απόδοση θα πρέπει να εξετάσει κάτι σαν `solr`ή `elasticsearch`για το έργο αυτό.


<https://wiki.apache.org/solr/SpellCheckComponent>
<https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html>


**Για το τμήμα μετάφρασης**


Απλά θα πρέπει να έχει ένα λεξικό έτοιμο σε βάση δεδομένων ή εντοπισμό των αρχείων σας και εκτελέστε το χαμηλότερο σημείο εισόδου και αυτό. Αναμείνετε υψηλή φορές υπολογιστών τόσο για τη διόρθωση ορθογραφίας και της μετάφρασης στον κώδικά σας. Η προφορά στα μαθήματα είναι αμερικανική. Η αλήθεια είναι ότι για τις διάφορες γλώσσες του Duolingo όπου οι ηχογραφήσεις είναι τεχνητές, από λογισμικό και όχι από άνθρωπο, δεν είναι πάντα και οι καλύτερες. Παρ' όλα αυτά οι εκφωνήσεις της αγγλικής φωνής είναι ακριβείς και ως επί το πλείστον ακούγονται φυσιολογικές, όπως όταν μιλάς με κάποιον που έχει τα αγγλικά ως μητρική του γλώσσα. Αυτό μάλλον κάνει τα πράγματα δύσκολα, γιατί οι δάσκαλοι συνήθως ευκολοποιούν τα πράγματα για τους αρχάριους μαθητές.


Προσωπικά, για την προφορά ολόκληρων φράσεων, χρησιμοποιώ επίσης το παρακάτω site: [www.acapela-group.com](http://www.acapela-group.com) Έχει πραγματικές και τεχνητές φωνές, με διαφορετικές προφορές, και εκεί φαίνεται καλύτερα πώς ακούγονται οι λέξεις στην κανονική ομιλία, κάτι που ένα λεξικό δεν μπορεί να αποδώσει.


Επίσης, μία μικρή παρατήρηση: γενικά οι αναρτήσεις με κεφαλαία στο ίντερνετ θεωρούνται το αντίστοιχο του "βάζω τις φωνές", κατά συνέπεια μία μίξη πεζών και κεφαλαίων μπορεί να αποφύγει πιθανές παρεξηγήσεις. :) <p>δεν περιγράφετε κλίμακα για να ταιριάζει. περιγράφεις την εμφάνιση. (έχω επεξεργαστεί την ερώτησή σας σε αυτό το θέμα.) η υποβολή γίνεται όσο το δυνατόν μεγαλύτερη, διατηρώντας παράλληλα την αναλογία της και προσαρμόζοντας εξ ολοκλήρου μέσα στον γονέα της.</p><p>τέλος πάντων, μπορείτε να το κάνετε αυτό με αυτόματη διάταξη. μπορείτε να το κάνετε εξ ολοκλήρου στο ib από xcode 5.1. ας ξεκινήσουμε με μερικές προβολές:</p><p><img src="https://i.stack.imgur.com/hhdxr.png" alt="some views"></p><p>η ανοιχτή πράσινη όψη έχει αναλογία διαστάσεων 4: 1. η σκούρα πράσινη προβολή έχει αναλογία διαστάσεων 1: 4. πρόκειται να δημιουργήσω περιορισμούς έτσι ώστε η μπλε όψη να γεμίζει το πάνω μισό της οθόνης, η ροζ όψη να γεμίζει το κάτω μισό της οθόνης και κάθε πράσινη προβολή να επεκτείνεται όσο το δυνατόν περισσότερο, διατηρώντας παράλληλα τον λόγο διαστάσεων και προσαρμόζοντας την δοχείο.</p><p>κατ 'αρχάς, θα δημιουργήσω περιορισμούς και στις τέσσερις πλευρές της μπλε όψης. θα το περάσω στον κοντινότερο γείτονα σε κάθε άκρη, με απόσταση 0. φροντίζω να απενεργοποιήσω τα περιθώρια:</p><p><img src="https://i.stack.imgur.com/yo2jf.gif" alt="blue constraints"></p><p>σημειώστε ότι το i <strong> δεν ενημερώνει </strong> το πλαίσιο ακόμα. θεωρώ ότι είναι ευκολότερο να αφήνετε χώρο μεταξύ των απόψεων κατά τη δημιουργία περιορισμών και απλά να ορίσετε τις σταθερές στο 0 (ή οτιδήποτε άλλο) με το χέρι.</p><p>στη συνέχεια, κλίνω το αριστερό, το κάτω και το δεξί άκρο της ροζ εικόνας στον πλησιέστερο γείτονά της. δεν χρειάζεται να ρυθμίσω έναν ανώτατο περιορισμό edge επειδή η άνω άκρη του είναι ήδη περιορισμένη στο κάτω άκρο της μπλε όψης.</p><p><img src="https://i.stack.imgur.com/spins.gif" alt="pink constraints"></p><p>χρειάζομαι επίσης έναν περιορισμό ισοδύναμων μεταξύ των ροζ και μπλε απόψεων. αυτό θα τους κάνει να γεμίσουν το ήμισυ της οθόνης:</p><p><img src="https://i.stack.imgur.com/oelrv.gif" alt="enter image description here"></p><p>αν λέω στο xcode να ενημερώσει όλα τα πλαίσια τώρα, έχω αυτό:</p><p><img src="https://i.stack.imgur.com/9fbwl.png" alt="containers laid out"></p><p>έτσι, οι περιορισμοί που έχω δημιουργήσει μέχρι τώρα είναι σωστοί. ανεξάρτητα από αυτό και να αρχίσετε να εργάζεστε με την ανοιχτό πράσινη όψη.</p><p>η τοποθέτηση σε πτυχές της ανοιχτής πράσινης προβολής απαιτεί πέντε περιορισμούς:</p><ul> <li>απαιτούμενος λόγος αναλογίας διαστάσεων προτεραιότητας στην ανοιχτό πράσινη όψη. μπορείτε να δημιουργήσετε αυτόν τον περιορισμό σε xib ή storyboard με xcode 5.1 ή νεότερη έκδοση.</li> <li>ο περιορισμός της απαιτούμενης προτεραιότητας που περιορίζει το πλάτος της ανοιχτό πράσινης όψης να είναι μικρότερο ή ίσο με το πλάτος του δοχείου.</li> <li>ένας περιορισμός υψηλής προτεραιότητας που καθορίζει το πλάτος της ανοιχτής πράσινης όψης να είναι ίσο με το πλάτος του δοχείου.</li> <li>ο περιορισμός της απαιτούμενης προτεραιότητας που περιορίζει το ύψος της ανοιχτής πράσινης όψης να είναι μικρότερο ή ίσο με το ύψος του δοχείου.</li> <li>ένας περιορισμός υψηλής προτεραιότητας που θέτει το ύψος της ανοιχτής πράσινης όψης να είναι ίσο με το ύψος του δοχείου.</li> </ul><p>ας εξετάσουμε τους δύο περιορισμούς πλάτους. ο περιορισμός που δεν είναι ο ίδιος, είναι επαρκής για να καθορίσει το πλάτος της ανοιχτής πράσινης όψης. πολλά πλάτη θα ταιριάζουν με τον περιορισμό. δεδομένου ότι υπάρχει ασάφεια, το autolayout θα προσπαθήσει να επιλέξει μια λύση που ελαχιστοποιεί το σφάλμα στον άλλο περιορισμό (υψηλής προτεραιότητας αλλά όχι υποχρεωτικό). η ελαχιστοποίηση του σφάλματος σημαίνει ότι το πλάτος είναι όσο το δυνατόν πλησιέστερο στο πλάτος του κιβωτίου, ενώ δεν παραβιάζεται ο απαιτούμενος περιορισμός που δεν είναι μικρός ή ίσος.</p><p>το ίδιο συμβαίνει και με τον περιορισμό του ύψους. και επειδή απαιτείται επίσης ο περιορισμός της αναλογίας πλευρών, μπορεί να μεγιστοποιηθεί το μέγεθος του υποβιβασμού κατά μήκος ενός άξονα (εκτός αν ο περιέκτης έχει την ίδια αναλογία διαστάσεων με την υποέκθεση).</p><p>έτσι πρώτα δημιουργώ τον περιορισμό της αναλογίας διαστάσεων:</p><p><img src="https://i.stack.imgur.com/4ihow.gif" alt="top aspect"></p><p>στη συνέχεια, δημιουργώ ίσους περιορισμούς πλάτους και ύψους με το δοχείο:</p><p><img src="https://i.stack.imgur.com/vycag.gif" alt="top equal size"></p><p>πρέπει να επεξεργαστώ αυτούς τους περιορισμούς ώστε να είναι λιγότερο από-ή-ίσους περιορισμούς:</p><p><img src="https://i.stack.imgur.com/bc7rh.gif" alt="top less than or equal size"></p><p>στη συνέχεια πρέπει να δημιουργήσω ένα άλλο σύνολο ίσων περιορισμών πλάτους και ύψους με το δοχείο:</p><p><img src="https://i.stack.imgur.com/u9hkm.gif" alt="top equal size again"></p><p>και πρέπει να θέσω τους νέους αυτούς περιορισμούς λιγότερο από την απαιτούμενη προτεραιότητα:</p><p><img src="https://i.stack.imgur.com/i7dte.gif" alt="top equal not required"></p><p>τελικά, ζητήσατε να είναι κεντραρισμένο το υποπεριοχή στο δοχείο του, οπότε θα ρυθμίσω αυτούς τους περιορισμούς:</p><p><img src="https://i.stack.imgur.com/4dtr1.gif" alt="top centered"></p><p>τώρα, για να δοκιμάσετε, θα επιλέξω τον ελεγκτή προβολής και θα ζητήσω από το xcode να ενημερώσει όλα τα πλαίσια. αυτό έχω:</p><p><img src="https://i.stack.imgur.com/kmtoy.png" alt="incorrect top layout"></p><p>ωχ! το subview έχει επεκταθεί για να γεμίσει πλήρως το δοχείο του. αν το επιλέξω, μπορώ να δω ότι στην πραγματικότητα διατηρείται η αναλογία του, αλλά κάνει μια πτυχή - <strong> συμπληρώστε </strong> αντί για μια πτυχή - <strong> ταιριάζει </strong>.</p><p>το πρόβλημα είναι ότι σε έναν λιγότερο από ή ίσο περιορισμό, έχει σημασία ποια είναι η άποψη σε κάθε άκρο του περιορισμού, και το xcode έχει δημιουργήσει τον περιορισμό απέναντι από την προσδοκία μου. θα μπορούσα να επιλέξω καθέναν από τους δύο περιορισμούς και να αντιστρέψω το πρώτο και δεύτερο στοιχείο. αντ 'αυτού, θα επιλέξω μόνο το subview και θα αλλάξω τους περιορισμούς ώστε να είναι μεγαλύτερο από-ή-ίσο:</p><p><img src="https://i.stack.imgur.com/mh4xm.gif" alt="fix top constraints"></p><p>το xcode ενημερώνει τη διάταξη:</p><p><img src="https://i.stack.imgur.com/srvqg.png" alt="correct top layout"></p><p>τώρα κάνω όλα τα ίδια πράγματα με τη σκούρα πράσινη θέα στο κάτω μέρος. πρέπει να σιγουρευτώ ότι η αναλογία πλευρών είναι 1: 4 (το xcode το μείωσε με περίεργο τρόπο αφού δεν είχε περιορισμούς). δεν θα δείξω τα βήματα ξανά, αφού είναι τα ίδια. εδώ είναι το αποτέλεσμα:</p><p><img src="https://i.stack.imgur.com/kdj1r.png" alt="correct top and bottom layout"></p><p>τώρα μπορώ να το εκτελέσω στον προσομοιωτή iphone 4s, ο οποίος έχει διαφορετικό μέγεθος οθόνης από τον ib που χρησιμοποιείται και δοκιμή περιστροφής:</p><p><img src="https://i.stack.imgur.com/hpa6w.gif" alt="iphone 4s test"></p><p>και μπορώ να δοκιμάσω στο iphone 6 προσομοιωτή:</p><p><img src="https://i.stack.imgur.com/otbq9.gif" alt="iphone 6 test"></p><p>έχω ανεβάσει τον τελικό πίνακα ιστορικού μου στο <a href="https://gist.github.com/mayoff/d9320088ab4025c95e40">αυτό το gist</a> για την ευκολία σας.</p> πάτε και κοιτάζετε αυλού. γιατί κύριε ; :stuck\_out\_tongue:

[εικόνα]

[εισαγωγή στο xinput και ενα setup με πολλά ποντίκια ταυτόχρονα](https://linux-user.gr/t/eisagwgh-sto-xinput-kai-ena-setup-me-polla-pontikia-taytochrona/981) [γενικά περί linux](/c/genika)

στο παρόν οδηγό θα καταλάβουμε πως λειτουργεί το σύστημα κάτω από το καπάκι και τι συμβαίνει στον υπολογιστή όταν πατήσουμε… εγκατέστησα την τελευταία έκδοση του προγράμματος και εξακολουθούσα να έχω το ίδιο πρόβλημα. τελικά με τη βοήθεια απο το σχετικό [google group](https://groups.google.com/g/devede-forum/c/2thoie_dsxq) του devedeng, κατάλαβα οτι επιλέγω λάθος encoding type για το αρχείο υποτίτλων που θέλω να βάλω στην ταινία.

όταν επέλεξα το σωστό τύπο encoding για το αρχε… Η προτιμώμενη μέθοδος είναι να χρησιμοποιήσετε πραγματικά την ιδιότητα υπό όρους για να τυλίξει τις κλήσεις εντοπισμού σφαλμάτων σας, μην χρησιμοποιήσετε τις οδηγίες μεταγλωττιστή. #ifs μπορεί να πάρει δύσκολες και μπορεί να οδηγήσει σε περίεργα προβλήματα κατασκευής.


Ένα παράδειγμα της χρήσης ενός υπό όρους χαρακτηριστικό είναι η εξής (σε C #, αλλά λειτουργεί σε VB.NET πολύ):



```
[ Conditional("Debug") ]
private void WriteDebug(string debugString)
{
  // do stuff
}

```

Κατά τη μεταγλώττιση, χωρίς το σετ σημαία DEBUG, κάθε κλήση προς WriteDebug θα καταργηθούν όπως υποτίθεται συνέβαινε με Debug.Write (). εντάξει, όλα καλά. το θέμα λύθηκε. η απορία όμως έμεινε.

**τι έκανα:text

άλλαξα τα repos σε testing. αυταααα… ευχαριστώ όλους για την συμπαράσταση!! ευχαριστώ και το [linux-user.gr](http://linux-user.gr) γιατί υπάρχει. <p><strong> συνολικά: </strong></p><p>τόσο το put όσο και το post μπορούν να χρησιμοποιηθούν για τη δημιουργία.</p><p>πρέπει να ρωτήσετε "σε τι εκτελείτε τη δράση;" να διακρίνετε τι πρέπει να χρησιμοποιείτε. ας υποθέσουμε ότι σχεδιάζετε ένα api για να κάνετε ερωτήσεις. εάν θέλετε να χρησιμοποιήσετε το post τότε θα το κάνετε σε μια λίστα ερωτήσεων. εάν θέλετε να χρησιμοποιήσετε το put τότε θα το κάνετε αυτό σε μια συγκεκριμένη ερώτηση.</p><p><strong> μεγάλη και οι δύο μπορούν να χρησιμοποιηθούν, έτσι ποιο πρέπει να χρησιμοποιήσω στο restful σχεδιασμό μου: </strong></p><p>δεν χρειάζεται να υποστηρίζετε τόσο το put όσο και το post.</p><p>το οποίο χρησιμοποιείται παραμένει στο χέρι σας. αλλά θυμηθείτε να χρησιμοποιήσετε το σωστό, ανάλογα με το αντικείμενο που αναφέρετε στο αίτημα.</p><p>μερικές σκέψεις:</p><ul> <li>ονομάζετε ρητά τα αντικείμενα url που δημιουργείτε ή αφήστε το διακομιστή να αποφασίσει; εάν τους ονομάσετε τότε χρησιμοποιήστε put. εάν αφήσετε τον διακομιστή να αποφασίσει στη συνέχεια, χρησιμοποιήστε το post.</li> <li>put είναι idempotent, οπότε αν put ένα αντικείμενο δύο φορές, δεν έχει καμία επίδραση. αυτή είναι μια ιδιοκτησία της νίκαιας, οπότε θα μπορούσα να χρησιμοποιήσω το put όταν ήταν δυνατόν.</li> <li>μπορείτε να ενημερώσετε ή να δημιουργήσετε έναν πόρο με put με την ίδια διεύθυνση url αντικειμένου</li> <li>με το post μπορείτε να έχετε 2 αιτήματα που εισέρχονται ταυτόχρονα για τροποποιήσεις σε μια διεύθυνση url και μπορεί να ενημερώσουν διαφορετικά μέρη του αντικειμένου.</li> </ul><p><strong> ένα παράδειγμα: </strong></p><p> <a href="https://stackoverflow.com/questions/256349/what-are-the-best-common-restful-url-verbs-and-actions/256359#256359">έγραψα τα εξής ως μέρος μιας άλλης απάντησης σχετικά με το so</a> :</p><blockquote> <p><strong> post: </strong></p> <p>χρησιμοποιείται για την τροποποίηση και την ενημέρωση ενός πόρου</p> <pre><code>post /questions/&lt;existing\_question&gt; http/1.1 host: www.example.com/ </code></pre> <p>σημειώστε ότι το ακόλουθο είναι ένα σφάλμα:</p> <pre><code>post /questions/&lt;new\_question&gt; http/1.1 host: www.example.com/ </code></pre> <p>εάν η διεύθυνση url δεν έχει δημιουργηθεί ακόμη, δεν θα πρέπει να χρησιμοποιείτε το post για να το δημιουργήσετε ενώ καθορίζετε το όνομα. αυτό θα πρέπει να έχει ως αποτέλεσμα ένα σφάλμα 'πόρος δεν βρέθηκε' επειδή το <code>&lt;new\_question&gt;</code> δεν υπάρχει ακόμα. πρέπει πρώτα να τοποθετήσετε τον πόρο <code>&lt;new\_question&gt;</code> στον διακομιστή.</p> <p>θα μπορούσατε όμως να κάνετε κάτι τέτοιο για να δημιουργήσετε πόρους χρησιμοποιώντας post:</p> <pre><code>post /questions http/1.1 host: www.example.com/ </code></pre> <p>σημειώστε ότι σε αυτήν την περίπτωση το όνομα του πόρου δεν έχει καθοριστεί, η διαδρομή url των νέων αντικειμένων θα σας επιστραφεί.</p> <p><strong> σημειωση: </strong></p> <p>χρησιμοποιείται για τη δημιουργία ενός πόρου ή για την αντικατάστασή του. ενώ ορίσετε τους πόρους νέα διεύθυνση url.</p> <p>για έναν νέο πόρο:</p> <pre><code>put /questions/&lt;new\_question&gt; http/1.1 host: www.example.com/ </code></pre> <p>για να αντικαταστήσετε μια υπάρχουσα πηγή:</p> <pre><code>put /questions/&lt;existing\_question&gt; http/1.1 host: www.example.com/ </code></pre></blockquote> κι εγώ το ίδιο αναρωτιέμαι. είμαι στο επίπεδο 12 με 47% ευχέρεια στη χρήση της γλώσσας. Έχω ολοκληρώσει το english tree. από δω και πέρα τι κάνουμε; απλά ενίσχυση γνώσεων για να ανέβουμε επίπεδα;