タグ付けされた質問 「api」

アプリケーションプログラミングインターフェイス(API)は、ソフトウェアが他のソフトウェアで使用されることを意図した仕様です。

30
独自のプログラミング言語とそのコンパイラを作成するにはどうすればよいですか[非公開]
私はプログラミングに精通しており、BASIC、FORTRAN、COBOL、LISP、LOGO、Java、C ++、C、MATLAB、Mathematica、Python、Ruby、Perl、JavaScript、アセンブリなどの言語に出会いました。人々がプログラミング言語を作成し、そのためのコンパイラを考案する方法を理解できません。また、Windows、Mac、UNIX、DOSなどのOSを人々がどのように作成するのかも理解できませんでした。私にとって不思議なもう1つのことは、人々がOpenGL、OpenCL、OpenCV、Cocoa、MFCなどのライブラリを作成する方法です。最後に理解できないのは、科学者がマイクロプロセッサ用のアセンブリ言語とアセンブラをどのように考案したかです。私はこれらすべてを本当に学びたいです。私は15歳です。私は常に、バベッジ、チューリング、シャノン、デニスリッチーなどのコンピューター科学者になりたいと思っていました。 私はすでにAhoのCompiler DesignとTanenbaumのOSコンセプトの本を読んでおり、それらはすべてコンセプトとコードを高レベルでしか議論していません。彼らは詳細やニュアンス、そしてコンパイラやオペレーティングシステムの考案方法には触れません。スレッド、セマフォ、プロセス、または解析とは何かを理解するだけでなく、自分で作成できるように具体的な理解が必要です。私は兄にこれについてすべて尋ねました。彼はMITのEECSのSBの学生であり、現実の世界でこれらすべてのものを実際に作成する方法の手がかりを持っていません。彼が知っているのは、皆さんが言及したようなコンパイラー設計とOSの概念(スレッド、同期、並行性、メモリー管理、字句解析、中間コード生成など)の理解だけです

12
APIキーなどの秘密情報をソース管理から守るための戦略は?
私は、ユーザーがTwitter、GoogleなどのOAuth資格情報を使用してログインできるようにするWebサイトに取り組んでいます。これを行うには、これらのさまざまなプロバイダーに登録し、所有している極秘APIキーを取得する必要がありますさまざまな身体部分からの誓約で保護する。キーがギャンクされると、パーツがヤンクされます。 APIキーは実行時に認証要求を実行するために使用されるため、ソースと共に移動する必要があります。私の場合、キーはアプリケーション内の構成ファイルまたはコード内に存在する必要があります。単一のマシンからビルドして公開する場合、それは問題ではありません。ただし、ソース管理をミックスに組み込むと、事態はさらに複雑になります。 私は安っぽい野郎なので、クラウド内のTFSやGitHubなどの無料のソース管理サービスを使用することを好みます。これにより、若干の難問が残ります。 APIキーがコード内にあり、コードが公開リポジトリで利用可能な場合、どうすれば体を傷つけずに保持できますか? これを処理する方法はいくつか考えられますが、満足できるものはありません。 コードからすべての個人情報を削除し、展開後に編集することができます。これは実装するのが非常に苦痛であり(多くの方法を詳しく説明しません)、オプションではありません。 暗号化できました。しかし、私はそれを解読しなければならないので、ソースを持っている人は誰でもそれを行う方法を見つけ出すことができました。無意味。 私は個人的なソース管理にお金を払うことができました。LOL j / kはお金を使いますか?お願いします。 言語機能を使用して、機密情報をソースの他の部分から分離し、ソース管理から保護することができます。これは私が今やっていることですが、誤ってシークレットファイルをチェックインすると簡単に失敗する可能性があります。 開発、デバッグ、展開を通じてスムーズに動作し、同様に確実に動作するプライベートを世界と共有しないことを保証する方法を本当に探しています(snapchatを除く)。これは完全に非現実的です。 それでは、現実的に何ができますか? 技術的な詳細:VS2012、C#4.5、ソース管理はTFサービスまたはGitHubのいずれかになります。現在、部分クラスを使用して、ソース管理に追加されない別の.csファイルで機密キーを分割します。GitHubには、.gitignoreを使用して部分的なクラスファイルがチェックインされないようにすることができるという利点があると思いますが、以前はそれを台無しにしました。「ああ、よくある問題、これがあなたのやり方です」を望んでいますが、私は「それができる限り吸わない」ために解決する必要があるかもしれません:/

14
Qtで記述されたデスクトップアプリが増えないのはなぜですか?[閉まっている]
Qtでの経験で私が知っている限り、また理解している限りでは、非常に優れた、簡単に学習できるライブラリです。非常にうまく設計されたAPIを持ち、クロスプラットフォームであり、これらは魅力的な多くの機能のうちの2つにすぎません。Qtを使用しないプログラマが増えている理由を知りたいです。それに反対する欠陥がありますか?Qtよりも他のライブラリの方が優れている機能はどれですか?問題はライセンスに関連していますか?
202 api  libraries  qt 

12
APIとSDKの違いは何ですか?
さまざまなAPIとSDKを調べていたときに、APIと呼ばれるものとSDKと呼ばれるものの違いを実際に理解できないことに気付きました。 両方とも、概念的には、他のソフトウェアがWebサービス、エンドユーザーアプリ、OSサービスまたはデーモン、またはカーネルであるかどうかに関係なく、プログラムが別のソフトウェアによって提供されるリソースとやり取りし、制御する方法ですデバイスドライバ。 それでは、SDKとAPIのセマンティックの違いは何ですか?

3
REST APIセキュリティストアドトークンvs JWT vs OAuth
モバイルアプリケーションとAPIの量は日々増加しているため、REST APIを保護するための最適なセキュリティソリューションを探しています。 私はさまざまな認証方法を試しましたが、まだいくつかの誤解があるため、より経験豊富な誰かのアドバイスが必要です。 このすべてを理解する方法を教えてください。何か間違って理解した場合は、お知らせください。 REST APIが一般にWEBと同様にステートレスである限り、各リクエスト(cookies、token ....)で認証データを送信する必要があります。ユーザーを認証するために広く使用されている3つのメカニズムを知っています HTTPSを使用したトークン。私はこのアプローチを何度も使用しましたが、HTTPSで十分です。ユーザーが正しいパスワードとログインを提供すると、応答としてトークンを受け取り、それを以降のリクエストに使用します。トークンはサーバーによって生成され、保存されます。たとえば、ユーザー情報が保存される別のテーブルまたは同じテーブルに保存されます。そのため、各リクエストサーバーで、ユーザーがトークンを持っているかどうかを確認します。トークンがデータベース内と同じである場合。すべてが非常に簡単です。 JWTトークン。このトークンは自己記述的であり、トークン自体に関するすべての必要な情報が含まれています。このトークンは秘密キーワードを使用してサーバーによって生成(署名)されるため、ユーザーは有効期限やその他の要求などを変更できません。これも明らかです。しかし、個人的には、トークンを無効にする方法の1つの大きな問題です。 OAuth 2.サーバーとクライアント間で直接通信が確立される場合、このアプローチを使用する必要がある理由がわかりません。私の知る限り、OAuthサーバーは、他のアプリケーションがパスワードとログインを保存せずにユーザー情報にアクセスできるように、制限されたスコープでトークンを発行するために使用されます。これは、ユーザーが何らかのページでサインアップしたい場合、ソーシャルネットワークにとって優れたソリューションです。サーバーは、たとえばtwitterやfacebookからユーザー情報を取得する許可を要求し、登録フィールドにユーザーデータなどを入力できます。 オンラインストアのモバイルクライアントを検討してください。 最初の質問は、最初のタイプのトークンよりもJWTを好むべきですか?モバイルクライアントでログイン/ログアウトユーザーが必要な場合、トークンをどこかに格納する必要があります。JWTの場合、ログアウト時にトークンを無効にする必要があります。トークンを無効化するには、無効なトークンリスト(ブラックリスト)を作成する方法があります。うーん。テーブル/ファイルのサイズは、トークンがテーブルに保存されてユーザーに関連付けられ、ログアウト時に削除された場合よりもはるかに大きくなります。 それでは、JWTトークンの利点は何ですか? OAuthに関する2番目の質問は、サーバーと直接通信する場合に使用する必要がありますか?クライアントとサーバー間のもう1つのレイヤーの目的はトークンの発行のみですが、通信はoauthサーバーではなくメインサーバーと行われます。私が理解しているように、OAuthサーバーは、ユーザーの個人情報にアクセスするためのサードパーティアプリのアクセス許可(トークン)を付与する責任があります。しかし、私のモバイルクライアントアプリケーションはサードパーティではありません。
104 security  rest  api  oauth  https 

3
ハードウェアアクセラレーション付きのベクターグラフィックスが削除されないのはなぜですか?
私は、60fpsでベクターパスをリアルタイムで操作するアプリを開発していますが、このテーマに関する情報が非常に少ないことに非常に驚いています。最初は、CoreGraphicsを使用してアイデアを実装しようとしましたが、目的に対して十分に機能しませんでした。それから、OpenVGと呼ばれるハードウェアアクセラレーションベクターグラフィックス用のKhronos標準があり、ありがたいことに、親切な魂がMonkVGと呼ばれるOpenGL ES準実装を書いていたことを発見しました。 しかし、OpenVGは非常に実用的なAPIであるという事実にもかかわらず、多かれ少なかれKhronosによって放棄されているようです。ウィキペディアによると、2011年以降、ワーキンググループは「さらなる標準化のために定期的な会議を開催しないことを決定しました」。私が見つけられる最高のドキュメントは、たった1枚のリファレンスカードで構成されています。さらに、インターネット上のどこにもOpenVGの例はほとんどありません。瞬く間に何百ものOpenGLチュートリアルを見つけることができますが、OpenVGは著しく欠落しているようです。 ハードウェアアクセラレータを使用したベクトルは、解像度が急速に向上する今日の世界でより重要になると思われます。多くの企業が独自の方法でこれを実装しているようです。たとえば、QtとFlashにはハードウェアアクセラレーションベクターのスキームがあり、アドビのツールの多くにはオプションとしてハードウェアアクセラレーションがあります。しかし、標準がすでに存在する場合、ホイールは再発明されつつあるようです! OpenVGが実世界での使用に適していないことについて、私が不足しているものはありますか?それとも、標準が間に合わなかっただけで、今ではあいまいになっているのでしょうか?将来、ハードウェアアクセラレーションベクターグラフィックス用の標準化されたAPIの余地があると思いますか、それとも従来のラスターベースの技術を使用する方が簡単でしょうか?それとも、ベクターは、出入りする前に単に出て行くところにありますか?


3
FutureとPromiseの違いは何ですか?
未来と約束の違いは何ですか?(AkkaとGparsで。) 彼らはブロックと同じように見えますが、getが呼び出され、将来の結果を取得することが約束されているときに未来の値を返します。
73 api  scala  groovy  akka 

7
URI対クエリ文字列によるREST APIの設計
次のような3つのリソースがあるとします。 Grandparent (collection) -> Parent (collection) -> and Child (collection) 上記は、これらのリソース間の関係を示しています。各祖父母は、1つまたは複数の親にマップできます。各親は、1つまたは複数の子にマップできます。子リソースに対する検索をサポートする機能が必要ですが、フィルター条件があります。 クライアントが祖父母へのID参照を渡した場合、その祖父母の直接の子孫である子供に対してのみ検索したいです。 クライアントが親へのID参照を渡した場合、親の直接の子孫である子に対してのみ検索したいです。 私はそのようなことを考えました: GET /myservice/api/v1/grandparents/{grandparentID}/parents/children?search={text} そして GET /myservice/api/v1/parents/{parentID}/children?search={text} 上記の要件に対して、それぞれ。 しかし、私はこのようなこともできます: GET /myservice/api/v1/children?search={text}&grandparentID={id}&parentID=${id} この設計では、クライアントにクエリ文字列のいずれかを渡すことができます:grandparentIDまたはparentIDのいずれかで、両方ではありません。 私の質問は: 1)どのAPI設計がよりRESTfulであり、その理由は何ですか?意味的には、同じ意味であり、同じように動作します。URIの最後のリソースは「子」であり、事実上、クライアントが子リソースを操作していることを意味します。 2)クライアントの観点からの理解可能性、およびデザイナーの観点からの保守性という点で、それぞれの長所と短所は何ですか。 3)リソースの「フィルタリング」以外に、実際に使用されるクエリ文字列は何ですか?最初の方法を使用する場合、フィルターパラメーターは、クエリ文字列パラメーターではなく、パスパラメーターとしてURI自体に埋め込まれます。 ありがとう!
73 design  rest  api 

8
複数のアクションが異なるステータスで終了した場合に返すHTTPステータスコードは何ですか?
ユーザーがサーバーに1つのHTTPリクエストで複数のアクションを実行するように要求できるAPIを構築しています。結果は、アクションごとに1つのエントリを持つJSON配列として返されます。 これらの各アクションは、互いに独立して失敗または成功する場合があります。たとえば、最初のアクションが成功し、2番目のアクションへの入力のフォーマットが不適切で検証に失敗し、3番目のアクションが予期しないエラーを引き起こす場合があります。 アクションごとに1つのリクエストがある場合、ステータスコード200、422、および500をそれぞれ返します。しかし、リクエストが1つしかない場合、どのステータスコードを返す必要がありますか? いくつかのオプション: 常に200を返し、より詳細な情報を本文に記載します。 リクエストに複数のアクションがある場合にのみ上記のルールに従うのでしょうか? すべてのリクエストが成功した場合は200を返し、そうでない場合は500(または他のコード)を返しますか? アクションごとに1つの要求を使用し、余分なオーバーヘッドを受け入れます。 まったく違うものですか?
72 api  http 

4
インターフェースに「オプションのメソッド」を使用してJavaコレクションが実装されたのはなぜですか?
Javaコレクションフレームワークを拡張する最初の実装中に、オプションとして宣言されたメソッドがコレクションインターフェイスに含まれているのを見て驚いた。実装者は、サポートされていない場合、UnsupportedOperationExceptionsをスローすることが期待されています。これはすぐに、貧弱なAPIデザインの選択肢として私を驚かせました。 Joshua Blochの優れた「Effective Java」の本を多く読んだ後、彼がこれらの決定に責任を負う可能性があることを知った後、本で支持されている原則と一致しなかったようです。コレクションと、「オプション」メソッドでコレクションを拡張するMutableCollectionの2つのインターフェイスを宣言すると、はるかに保守性の高いクライアントコードにつながると思います。 ここに問題の優れた要約があります。 2つのインターフェイスの実装の代わりにオプションのメソッドが選択された理由はありますか?

3
RESTful APIの末尾のスラッシュ
私はRESTful APIの末尾のスラッシュをどうするかについて議論していました。 犬と呼ばれるリソースと、個々の犬用の下位リソースがあるとします。したがって、次のことができます。 GET/PUT/POST/DELETE http://example.com/dogs GET/PUT/POST/DELETE http://example.com/dogs/{id} しかし、次の特別な場合はどうしますか: GET/PUT/POST/DELETE http://example.com/dogs/ 私の個人的な見解では、これはid =で個々のdogリソースにリクエストを送信するということnullです。この場合、APIは404を返すはずです。 他の人は、リクエストがdogsリソースにアクセスしている、つまり末尾のスラッシュが無視されると言います。 誰もが決定的な答えを知っていますか?
60 api  rest  http 

7
RESTFul:状態変更アクション
私はRESTfull APIを構築する予定ですが、私の頭の中にいくつかの問題を引き起こしているいくつかのアーキテクチャ上の質問があります。クライアントにバックエンドビジネスロジックを追加することは、ビジネスロジックが急速に変化する可能性があるため、複数のクライアントプラットフォームの更新をリアルタイムで維持するのが難しいため、回避したいオプションです。 リソースとして記事(api / article)があるとしましょう。発行、非公開、アクティブ化、非アクティブ化などのアクションをどのように実装する必要がありますか? 1)api / article / {id} / {action}を使用する必要があります。リモートロケーションへのプッシュや複数のプロパティの変更など、多くのバックエンドロジックがそこで発生する可能性があるためです。おそらくここで最も難しいことは、更新のためにすべての記事データをAPIに送り返す必要があり、マルチユーザーの作業を実装できなかったことです。たとえば、エディターは5秒前のデータを送信し、他のジャーナリストが2秒前に行った修正を上書きすることができます。また、記事を公開している人はコンテンツの更新とはまったく関係がないため、これをクライアントに説明する方法はありません。 2)新しいリソースの作成もオプションapi / article- {action} / idですが、返されるリソースはarticle- {action}ではなく、これが適切かどうかわからない記事になります。また、サーバー側のコード記事クラスでは、両方のリソースで実際の作業を処理していますが、これがRESTfull思考に反するかどうかはわかりません どんな提案も歓迎します。
59 api  rest 

8
APIでHTTPステータスコード404を使用する場合
私はプロジェクトに取り組んでおり、職場の人々と約1時間以上議論した後です。スタック交換の人々が何を言うかを知ることにしました。 システム用のAPIを作成しています。組織のツリーまたは目標のツリーを返すクエリがあります。 組織のツリーは、ユーザーが存在する組織です。つまり、このツリーは常に存在する必要があります。組織では、目標ツリーが常に存在する必要があります。(それが引数の始まりです)。ツリーが存在しない場合、同僚はステータスコード200で応答するのが正しいと判断しました。その後、ツリーがないときにアプリケーションがバラバラになるため、コードを修正するように頼み始めました。 私は炎と怒りをspareしまないようにします。 ツリーがない場合、404エラーを発生させることを提案しました。少なくとも何かが間違っていることを知らせてくれるでしょう。200を使用する場合、エラーを処理するために成功コールバックの応答に特別なチェックを追加する必要があります。オブジェクトを受け取ることを期待していますが、何も見つからないため、実際には空の応答を受け取る場合があります。応答を404としてマークするのはまったく公平に思えます。その後、戦争が始まり、HTTPステータスコードスキーマを理解していないというメッセージを受け取りました。だから私はここにいて、この場合の404の何が問題なのか尋ねていますか?「何も見つからなかったので、200を返すのは正しい」という議論もありました。ツリーは常に存在する必要があるため、これは間違っていると思います。何も見つからず、何かを期待している場合は、404になります。 詳細、 取得したURLを追加するのを忘れました。 組織 /OrgTree/Get 目標 /GoalTree/GetByDate?versionDate=... /GoalTree/GetById?versionId=... 私の間違い、両方のパラメーターが必要です。日付に解析できるversionDateが提供されている場合、終了リビジョンを返します。過去に何かを入力すると、最初のリビジョンが返されます。IDが存在しないIDである場合、200の空の応答を返すと思われます。 追加 また、この問題に対する最善の答えは、組織の作成時にデフォルトのオブジェクトを作成することであり、ツリーを持たないことは有効なケースではなく、未定義の動作と見なすべきです。両方のツリーがなければアカウントを使用する方法はありません。そのため、それらは常に存在する必要があります。 また、私はこれをリンクしました(1つは似ていますが、見つけることができません) http://viswaug.files.wordpress.com/2008/11/http-headers-status1.png

4
重複コードを受け入れることができる例外的なケースはありますか?
私は、3つのAPIを構築する必要があるソフトウェアプロジェクトに取り組んでいます。1つはホームバンキングチャネル用、もう1つは代理店チャネル用、3つ目はモバイルチャネル用です。 エージェンシーAPIは、すべての機能を備えているため、最も完成度の高いAPIです。 ここでのアーキテクトは、共通層(すべてのAPIで共有されるクロスチャネルEJBサービス)を作成しました。ただし、APIは異なります。 現在のところ、API間に大きな違いはありません。大きなチームはエージェンシーチャンネルから始まり、現在はホームチャンネルに適応しています。私たちは、単にホームアプリ専用のオブジェクトを強化しています。それ以外の場合、コードはAPI間で95%類似しています。APIはSpring MVCの上に構築されており、(コントローラー、モデル、およびいくつかのユーティリティ)があります。 基本的に、コントローラーはBOをChannelObject(これを行うのに適切な場所ではないようです)、およびいくつかの追加のユーティリティとシリアライザーへのマッピングBOを実行しています。今のところすべてが重複しています。重複の理由は、APIを独立させたいからだと言っています。「明日、私たちが代理店や携帯電話とは異なる行動を家庭で望むなら、私たちは苦労しません!」 重複コードを受け入れる必要がある場合はありますか?
57 java  api  spring 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.